3

多くのテキスト ファイルを含むディレクトリの階層があります。特定のテキスト文字列がファイルの 1 つに表示されるたびに検索し、別の文字列に置き換えたいと考えています。たとえば、"Coke" という文字列をすべて "Pepsi" に置き換えたいとします。誰もこれを行う方法を知っていますか? これらすべてのファイルをエディターにロードすることなくこれを実行できる、またはそれを実行するためのより複雑なスクリプトを考え出す必要がない、ある種の Bash コマンドがあるかどうか疑問に思っています。

sed を使用したトリックを説明しているこのページを見つけましたが、サブディレクトリ内のファイルでは機能しないようです。

4

7 に答える 7

15

sedと組み合わせて使用​​しfindます。例えば:

find . -name "*.txt" | xargs sed -i s/Coke/Pepsi/g

また

find . -name "*.txt" -exec sed -i s/Coke/Pepsi/g {} \;

(詳細については、find の man ページを参照してください)

于 2010-05-18T19:01:07.077 に答える
3

find . -type f -exec sed -i 's/old-word/new-word/g' {} \;

于 2010-05-18T19:03:09.357 に答える
3

IMO、このタスクを最も簡単に使用できるツールは次のrplとおりです。

rpl -R Coke Pepsi .

-Rすべてのサブディレクトリでの再帰的置換用です)

于 2010-05-18T19:02:45.407 に答える
3

次のように sed と find を組み合わせます。

find . -name "file.*" -exec sed -i 's/Coke/Pepsi/g' {} \;
于 2010-05-18T19:02:56.773 に答える
2

findとの組み合わせが必要sed

于 2010-05-18T19:04:07.607 に答える
2

私は通常、perlでそれを行います。ただし、注意してください。通常の文字列置換よりもはるかに強力な正規表現を使用します。

% perl -pi -e 's/Coke/Pepsi/g;' $filename

編集サブディレクトリを忘れました

% find ./ -exec perl -pi -e 's/Coke/Pepsi/g;' {} \;
于 2010-05-18T19:02:19.013 に答える
0

次のこともできます。

検索 & 編集による検索 & 置換

http://codesnippets.joyent.com/posts/show/2299

(-t フラグによるテストモードも備えています)

于 2010-06-28T09:19:01.717 に答える