目次

Unix :: コマンド / sed

コマンド説明
sedStream EDitor の略で、定型的なテキストデータの処理を行うプログラム


複雑な置換処理でよく使います


置換いろいろ

`&'記号:マッチした文字列全体を挿入する

% echo abc def ghi | sed 's/def/&DEF/'
abc defDEF ghi

`g'オプション:(global)マッチした部分を全て置換する

% echo abc def abc ghi | sed 's/abc/ABC/g'
ABC def ABC ghi
`g'オプションを使用しない場合
echo abc def abc ghi | sed 's/abc/ABC/'
ABC def abc ghi

2回目に出現する「abc」は置換されない


n番目にマッチしたマッチした部分のみ置換する

% echo abc def abc ghi abc | sed 's/abc/ABC/2'
abc def ABC ghi abc
2回目に出現する「abc」のみ置換される


1回のコマンドで複数の置換を実行する (-e オプション)

% echo abc def ghi jkl | sed -e 's/abc/ABC/' -e 's/ghi/GHI/'
ABC def GHI jkl

ファイルから読み込んで置換を実行する (-f オプション)

% less regex.sed
s/abc/ABC/
s/def/DEF/
s/ghi/GHI/
s/jkl/JKL/

% echo abc def ghi jkl | sed -f regex.sed
ABC DEF GHI JKL

後方参照 \1

% echo 'A12345 6789Z' | sed 's/^A\([0-9]\+ [0-9]\+\)Z$/\1/'
12345 6789
グルーピングの括弧を増やせば、\2,\3,\4…と対応していく


?以降を削除(クエリ文字列の削除)

% echo '123?456?789' | sed 's/\(?[^?]*$\)//' 
123?456
上記の正規表現は、最後に見つかった「?」以降を削除する


HTMLエンティティーをデコードして文字に戻す

  1. 対象ファイルを ls
  2. .bak 拡張子を付けて、バックアップをとる
  3. 対象ファイルを1つずつ読み込んで、置換を行う
ls | xargs sed -i.bak -e 's/\&amp;/\&/g' -e 's/\&lt;/</g' -e 's/\&gt;/>/g' -e 's/\&quot;/"/g'