findのオプション設定の煩わしさよりも、
grepの手軽さでディレクトリを再帰的に追っていきたい。
手軽に書けるためこの方法を良く使っています。
細部をよく忘れるので備忘録。


カレントディレクトリ以下を再帰的に検索し、"hoge"の文字列を含むファイルに対して、"11"を"22"に置換する。

grep -lr "hoge" . | xargs sed -i".bak" -e "s/11/22/g"


中を分解すると、

grep -lr "hoge" .

カレントディレクトリ以下を再帰的に検索し、"hoge"の文字列を含むファイルをピックアップ。
-lオプションでファイル名のみ出力できる。-rは再帰検索のオプション。

| xargs

ピックアップされたファイルを、
|とxargsでつないて、sedの入力ファイルとして渡してあげる。

sed -i".bak" -e "s/11/22/g"

-i".bak"の部分はバックアップをつけるオプション。
-I".bak"の間にはスペースを入れてはいけないことに注意。

置換のファイル対象を指定したくなければ、"hoge"を"."とすることもできる。"."は正規表現で任意の一文字(改行は除く)を表す。
grep -lr "hoge" . | xargs sed -i".bak" -e "s/11/22/g"

スポンサーリンク