LinuxServer シェルとコマンド操作について テキストファイル内の検索

この記事は2012年11月15日に書かれたものです。内容が古い可能性がありますのでご注意ください。


sedコマンド

sedコマンドはテキストストリームに対して編集を行います

[コマンド書式]
sed -オプション 編集コマンド 入力ファイル名

sed -オプション -e 編集コマンド1 [-e 編集コマンド2…] 入力ファイル名

sed -オプション -f ファイル 入力ファイル名

sedでは編集内容を標準入力からのコマンドを1つ場合はオプションなしで、2つ以上の場合は-eオプションを付けることで編集を行います。
また、編集内容を記述したファイルを使用する方法(-fオプション)もあります。

sedの編集コマンドには次のものがあります。

編集コマンド 説明
/文字列/d 文字列が含まれる行を削除します
行番号1,行番号2d 行番号1から行番号2までの行を削除します
s/文字列1/文字列2/ 各行の最初に現れる文字列1を文字列2に置き換えます
s/文字列1/文字列2/g 全ての文字列1を文字列2に置き換えます
y/文字1文字2/文字3文字4/ 文字1を文字3に、文字2を文字4に置き換えます

[コマンド実行例]
$ cat sedfile.txt
eee,1511,AAA
ccc,1211,BBB
fff,1311,CCC
AAA,1411,AAA
aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

sedfile.txtの1行目から5行目を削除します
$ sed ‘1,5d’ sedfile.txt
bbb,1611,FFF
.*.,1711,?_?

sedfile.txtで1111にマッチした行を削除します
$ sed ‘/1111/d’ sedfile.txt
eee,1511,AAA
ccc,1211,BBB
fff,1311,CCC
ggg,1411,AAA
bbb,1611,FFF
.*.,1711,?_?

sedfile.txt内の各行で最初にマッチしたAAAをZZZに置き換えます。
$ sed ‘s/AAA/ZZZ/’ sedfile.txt
eee,1511,ZZZ
ccc,1211,BBB
fff,1311,CCC
ZZZ,1411,AAA
aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

sedfile.txt内の全行でマッチしたAAAをZZZに置き換えます。
$ sed ‘s/AAA/ZZZ/g’ sedfile.txt
eee,1511,ZZZ
ccc,1211,BBB
fff,1311,CCC
ZZZ,1411,ZZZ
aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

sedfile.txt内の1行目から5行目の行頭に#を付与します。
$ sed ‘1,5s/^/#/g’ sedfile.txt
#eee,1511,AAA
#ccc,1211,BBB
#fff,1311,CCC
#AAA,1411,AAA
#aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

置き換え内容が複数ある場合は各編集コマンドに-eオプションを付与します。
$ sed -e ‘s/AAA/ZZZ/g’ -e ‘1,5s/^/#/g’ sedfile.txt
#eee,1511,ZZZ
#ccc,1211,BBB
#fff,1311,CCC
#ZZZ,1411,ZZZ
#aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

Aを1に、Bを2に、Cを3にそれぞれ置き換えます。
$ sed ‘y/ABC/123/’ sedfile.txt
eee,1511,111
ccc,1211,222
fff,1311,333
111,1411,111
aaa,1111,EEE
bbb,1611,FFF
.*.,1711,?_?

編集コマンド内でメタキャラクタ使用するとシェルが誤った解釈をしてコマンドが正常に実行されない場合もあります。
あらかじめ、編集コマンドを単一引用符「’」で囲むことで誤解釈を防ぐことができます。

ページ:
1

2

  • このエントリーをはてなブックマークに追加

PAGE TOP