名古屋出身ソフトウェアエンジニアのブログ

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

  1. sed は行指向のコマンドです。 ↩︎

  2. 一部 BSD 系の sed では機能しない気がします。 ↩︎

  3. Windows 環境で役立ちます。 ↩︎