tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

ファイルの中身の文字列を一括置換

備忘録メモ

プロジェクトソースなんかのファイルの中身の文字列を一括で置換したいときメモ
秀丸でもいいですけどね)

# perl -pi -e 's/hoge/fuga/g' ./*.txt
※いまいるディレクトリ内の拡張子.txtのファイルの中身の文字列'hoge'を'fuga'に置換

ただ、これだと上記にも書いたように"同一階層内のファイルたち"が対象。
再帰的に指定したディレクトリ以下のファイルの中身を置換したい場合はこうやる

# grep -lr hoge ./ | grep -v '.git' | xargs perl -pi -e 's/hoge/fuga/g' 

簡単に解説

# grep -lr hoge ./

いったん文字列'hoge'を含むファイルをファイル名のみリスト表示

# grep -v '.git'

の、中から.gitを含むファイルを除く

# xargs perl -pi -e 's/hoge/fuga/g'

を、xargsでperlコマンドの対象ファイルとして渡す

オプション

オプション 意味
-p 入力ファイルから1行ずつ取り出して処理
-i ファイルを修正。拡張しを指定することでその拡張子でバックアップする
-e 直後部分をスクリプトとして処理
-w エラーを確認できる(?)

てきとうでごめんなさい
こちらも参考:http://kazmax.zpp.jp/linux/lin_replace.html