0

grep コマンドの出力を使用して、見つかったすべてのファイルを置換しようとしています。問題は、見つかったファイルの一部に名前にスペースが含まれていることです。これは、私が使用しているものを簡略化した grep コマンドです (複数のメール ホストで複数の名前を検索します)。

grep -Ril oldname@foo.com *

これにより、必要なファイルを含むリストが生成され、ファイル名がリストされているだけです (-lオプション)。バッククォートを使用して、ファイル名を Perl ワンライナーに入力しています。

perl -pi -e 's/oldname\@foo\.com/newname\@bar.com/gi' `grep -Ril oldname@foo.com *`

これは、リストされているファイルの名前にスペースが含まれていない場合に機能しますが、含まれていると壊れます。

find を使用-print0して andを使用できることはわかっていますxargs -0が、に相当するものはないようですgrep

からの出力をgrepファイルに入れてから読み取ることができましたが、これがワンライナーとして何らかの形で可能かどうかを知りたいです。

4

1 に答える 1

0

私のgrepには、すべてのファイル名の後にNULを出力する-Z --nullオプションがあります。これをperl -0で使用できます。

于 2012-02-13T19:07:02.207 に答える