sed
コマンドとawk
コマンドを学習したので、まとめてみる。
特にawk
コマンドはプログラミングみたいで、使いこなせればいろいろできそう。
sed
コマンド
文字列置換の時に大活躍のコマンド。
通常だと置換前データは変更しない。
行を削除する
# 1行目削除。
$ sed 1d test.txt
# 2行目から5行目まで削除。
$ sed 2,5d test.txt
# 3行目から最終行まで削除。
$ sed '3,$d’ test.txt
# 正規表現を使ってBで始まる行を削除。
$ sed /^B/d test.txt
行を置換する
# 行頭から探して最初の文字列abcをxyzに置換する。
$ sed 's/abc/xyz/' test.txt
# 行の全ての文字列abcをxyzに置換する。
$ sed 's/abc/xyz/g' test.txt
# 置換が発生した行だけ出力。
$ sed -n 's/!//gp' test.txt
# 区切り文字も変えられる。
# 1行目から3行目の範囲を指定。
$ sed '1,3s!abc!/abc/!/g' test.txt
# 上書き前のファイルに拡張子.bakをつけて保管することもできる
$ sed -i.bak -e '/^#/d' config.txt
他に使えるオプション。
オプション | 意味 |
---|---|
-e | スクリプトを指定。 |
-i | 上書きする。 |
-r | 拡張正規表現を使う。 |
awk
コマンド
軽いプログラミング的なことができるコマンド。
基本は$ awk 'パターン {アクション]'
。
列をフィールド、行をレコードと呼ぶ。
パターンを指定しない場合、全てのレコードに対してアクションが行われる。
各フィールドの値はそれぞれ変数に格納される。
第1フィールドは$1
、第2フィールドは$2
みたいに。$0
はレコード全体を示す。
変数NF
はフィールド数を、変数NR
はレコード数を表す。$NF
で最後のフィールドの値を参照できる。
使えるオプション。
オプション | 意味 |
---|---|
-F | 区切り文字を指定(デフォルトはスペース)。 |
-i | スクリプトファイルを読み込む。 |
使い方↓
# 第5フィールドと第9フィールドを出力。
$ ls -l /usr/bin | awk '{print $5,$9}'
# 最後と最後から2番目のフィールドを出力。
$ $ ls -l /usr/bin | awk '{print $(NF-1),$NF}'
# 第9フィールドのcpで始まる行をパターンで指定。
$ ls -l /usr/bin | awk '$9 ~ /^cp/ {print $5,$9}'
187392 cp
185320 cpio
67152 cpupower
# 比較対象を省略すると行の先頭から検索する。
$ ls -l /usr/bin | awk '/^l/ {print $5,$9}'
# アクションまたはprintの引数を省略すると{print $0}が実行される。
# 以下三つは全て同じ。
$ awk '$9 ~ /^cp/'
$ awk '$9 ~ /^cp/ {print}'
$ awk '$9 ~ /^cp/ {print $0}'
# 「,」を区切り文字に、「average.awk」をスクリプトファイルに指定して平均値を求める。
$ cat score.svc
1,osumi,39
2,miyake,74
3,suzuki,59
4,hasegawa,12
5,ino,98
6,tanaka,41
$ cat average.awk
{sum += $NF} END{print “Average:”,sum/NR}
$ awk -F, -f average.awk score.svc
Average: 53.8333
感想
sed
コマンドはこないだの自動画像収集ツールの時にも使ったし、だいぶ詳しくなった↓
Google Custom Search APIを使って自動画像収集ツールを作ったった
文字列置換はやっぱ便利だね。
参考にしたサイト等
技術ブログをはじめよう
Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
.qrunch.io
メールアドレスで登録する
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく
0件のコメント