sed簡単整理1 - 基本 -
簡単な変換はsedで、複雑な変換はawkというようにしていましたが、
sedもawkぐらいのことができると分かったので、整理してみます。
sedはperlっぽくて私にはawkの方が使いやすかったですが、
少しいじってみたら、sedの方が簡潔でよかったです。
状況次第でsedとawkを使い分けたら、効率があがりそうです。
使い方
sed -e '処理内容' ファイル名 # 正規表現を使いたい場合、-rを付ける。 # 普段はリダイレクト(>)で別のファイルに出力し、原本は残すが、原本を修正したい場合は-iを付ける。
処理内容
アドレス+コマンド+コマンドパラメータ
アドレス
行番号又は文字列又は正規表現。正規表現を使う時は-rオプションが必要。
1,5 : 1行目から5行目まで 1~5 : 1行目から5行おき(1, 6, 11...)。 5,$ : 5行目から最後の行まで。 /apple/ : appleがある行。 /apple/,/pie/ : appleからpieまで。
コマンド
s, d, i, N, H, h, pなどがある。
各コマンドの前に!が付くと、逆の意味になる。
コマンドパラメータ
s/apple/pie/ #sコマンドのコマンドパラメータはappleとpie。 4asuper! #aコマンドのコマンドパラメータはsuper!。
sコマンド
置換。
cat << EOF > sed_test.txt a apple haha b apple hihi c apple hopi d man ama e kkk appp f apple mamo g apple nami abc apple !! wow happy new year, duke! EOF sed -e '1,5s/apple/pie/g' sed_test.txt # 1行目から5行目までのappleをpieに置換。 # 結果 # a pie haha # b pie hihi # c pie hopi # ... sed -r -e 's/happy.+year/>&</g' sed_test.txt # &はパターンにマッチした文字列(下記の場合、happy new year)。 # 正規表現なので、-rオプションがついた。 # 結果 # ... # wow >happy new year<, duke! sed -e '/abc/s/apple/pie/g' sed_test.txt # abcがある行のappleをpieに変換。 # 結果 # ... # abc pie !! # ...
dコマンド
削除。
sed -e '5d' sed_test.txt #5行目を削除。 sed -e '5!d' sed_test.txt #5行目以外を削除。
iコマンド
指定した行に文字列を挿入。
sed -e '4isuper!' sed_test.txt # 4行目にsuper!を挿入。 # 結果 # a apple haha # b apple hihi # c apple hopi # super! # ...
aコマンド
指定した行の後ろに文字列を追加。
sed -e '4asuper!' sed_test.txt # 4行目の後ろ(つまり、5行目)にsuper!を挿入。 # 結果 # a apple haha # b apple hihi # c apple hopi # d man ama # super! # ...
Nコマンド
次の行を先読みする。複数の行をまとめて処理する時に利用できる。
sed -e 'N;N;s/\n/,/g' sed_test.txt # 3行ずつ(基本1行 + N(次の1行) + N(次の1行))読み込んで、コンマでつなげる。 # 最後のgはglobal。マッチした全ての文字列を置換するという意味。これがないと1行目のみ置換される。 # 結果 # a apple haha,b apple hihi,c apple hopi # d man ama,e kkk appp,f apple mamo # g apple nami,abc apple !!,wow happy new year, duke!
H, h, p
ホールドスペース・パターンスペースに関連するコマンド。
sed簡単整理2に整理する予定。複雑な処理に使える。