sed で個人的によく使うコマンドまとめ
公開:
更新:
目次
前置き
拡張正規表現を常に ON にする
標準の sed
では基本正規表現 (BRE) が使われますが、より強力な拡張正規表現 (ERE) を使う場合は -r
オプションを付けます。記法上の混乱を避けるために、常に -r
を有効にしておくことをお勧めします。
最短マッチ記法は使えない
sed
では .*?
と書いても最短マッチにならないので注意が必要です。
すべて置換 (global)
g
フラグを付けると、行の中1でマッチする全ての部分を置換できます。
sed -r 's/AAA(.*)BBB/XXX\1YYY/g' in.txt > out.txt
置換して上書き (in-place)
-i
オプションを使うと、元のファイルを直接変更できます。
sed -r -i 's/AAA(.*)BBB/XXX\1YYY/g' in.txt
大文字・小文字を区別しない (case-insensitive)
I
フラグを付けると、大文字小文字を無視して検索できます2。
sed -r -i 's/AAA(.*)BBB/XXX\1YYY/Ig' in.txt
再帰的に置換
ディレクトリツリー内のすべてのファイルに対して sed
を適用する場合、find
コマンドを使うのが一般的なようですが、私は Python ワンライナーを使います3。
python3 -c 'import subprocess as sp; from pathlib import Path; [sp.run(["sed", "-i", r"s/abc\.example\.com/xyz.example.com/g"]) for p in Path(".").rglob("*.html", case_sensitive=False) if p.is_file()]'
マッチする行を削除
d
フラグを使うと、マッチした行を削除できます。
sed -r '/Super/d' in.txt > out.txt