それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sed で出現文字をすべて置換する /g オプション

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