sedで1行の中に複数回出てくる文字を全部置換
sed で置換していると、普段は気にならないけど、複数回登場する場合に置換漏れが出てくる。
グローバルのマッチング・オプション /g
がある。
s/cat/dog/g
時々忘れそうになる
設定ファイルを触っているときには、気にならないことが多いので忘れそうになる。
global マッチオプションの例
ファイルを作ります。
takuya@:~$ echo cat cat cat > sample takuya@:~$ echo cat cat cat >> sample takuya@:~$ echo cat cat cat >> sample takuya@:~$ echo cat cat cat >> sample takuya@:~$ echo cat cat cat >> sample
ファイルの中身を確認
takuya@:~$ cat sample cat cat cat cat cat cat cat cat cat cat cat cat cat cat cat
グローバルオプションなしで置換します。
takuya@:~$ cat sample | sed 's/cat/lion/' lion cat cat lion cat cat lion cat cat lion cat cat lion cat cat
グローバルのオプションを有効にしたら
takuya@:~$ cat sample | sed 's/cat/lion/g' lion lion lion lion lion lion lion lion lion lion lion lion lion lion lion
置換漏れに注意
dockerfile などを書いている場合は sed をグローバルなしで使ってても本当に気にならない。1行に同じ文字が出てくることはあまりない。
ところがデータファイルを扱うととたんに顕著にミスとして顕れてくる。本当に怖い。
参考
man sed