私はあなたのchangesDictionary.txtファイルをsedスクリプトに変換します...sed:
$ sed -e 's/^"\(.*\)" = "\(.*\)"$/s\/\1\/\2\/g/' \
changesDictionary.txt > changesDictionary.sed
注意:辞書内の正規表現またはsed式の特殊文字は、sedによって誤って解釈されるため、辞書に含めることができるのは最も原始的な検索と置換のみであるか、sedファイルを次のように維持する必要があります。有効な式。残念ながら、sedで正規表現をシャットオフして文字列照合のみを使用するか、検索と置換を「リテラル」として引用する簡単な方法はありません。
結果のsedスクリプトで、 find-execではなくfindとxargsを使用して、一度に複数のファイルを処理することにより、sedスクリプトを使用してファイルをできるだけ早く変換します。
$ find somedir -type f -print0 \
| xargs -0 sed -i -f changesDictionary.sed
sedの-i
オプションはファイルを「インプレース」で編集するため、安全のために必ずバックアップを作成するか、-i~
チルダバックアップの作成に使用してください。
最後に、検索と置換を使用すると、意図しない結果が生じる可能性があります。他の検索のサブストリングである検索はありますか?これが例です。
$ cat changesDictionary.txt
"fix" = "broken"
"fixThat" = "Fixed"
$ sed -e 's/^"\(.*\)" = "\(.*\)"$/s\/\1\/\2\/g/' changesDictionary.txt \
| tee changesDictionary.sed
s/fix/broken/g
s/fixThat/Fixed/g
$ mkdir subdir
$ echo fixThat > subdir/target.txt
$ find subdir -type f -name '*.txt' -print0 \
| xargs -0 sed -i -f changesDictionary.sed
$ cat subdir/target.txt
brokenThat
「fixThat」は「Fixed」または「brokenThat」になっている必要がありますか?sedスクリプトの注文事項。同様に、検索と置換は複数回検索して置換できます。「a」を「b」に変更すると、後で別の検索と置換によって「b」から「c」に変更される場合があります。
おそらくあなたはすでにこれらの両方を検討しているかもしれませんが、私はあなたが以前にやっていたことを試したが、それについて考えていなかったので言及します。一度に複数の検索と置換を行うために単に正しいことをするものは何も知りません。したがって、自分で正しいことを行うようにプログラムする必要があります。