あるディレクトリ以下の複数ファイル内の文字列を一括で置換するワンライナー

by Kup, Kup Land


Linuxを使っていて、複数のファイル内に散らばっている、ある文字列を一括して置換する方法。
特定の環境にあわせて、一気に特定のパラメータを書き換えたい場合とか。

$ find . -type f -name '*.html' -print0 | xargs -0 perl -i.bak -pe 's/from/to/g'

findとperl+正規表現で。

上の例は、今いるカレントディレクトリ以下の全ての".html"ファイル内の"from"という文字列を全て"to"に置き換えるワンライナー。
変更が行われたファイルは全て".bak"という拡張子で元のファイルがバックアップされます。
# ちなみに、"-i"の後ろに拡張子を書かないと実行すると、バックアップは取られず書き換えられる。


ファイル名に空白文字が入る場合も考慮して、findに-print0オプションを付けて、xargs -0で受け取るようにしたけど、そんなパターンねーよ、って場合は、上記オプションは不要です。


その他、以下など、bashのforとsedコマンドを使って一括置換する方法は、結構たくさんのサイトで紹介されていたります。

for FILE in *.txt; do cp $FILE $FILE.bak; sed -e "s/置換前文字列/置換後文字列/g" $FILE.bak > $FILE; done

複数ファイル内文字列を一括置換する方法

ご参考まで。

参考


詳説 正規表現 第3版

詳説 正規表現 第3版

  • 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/04/26
  • メディア: 大型本
  • 購入: 24人 クリック: 754回
  • この商品を含むブログ (82件) を見る