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"
スポンサーリンク