2009-05-14 8 views
1

私は質問をする時間だと思っていたほど不満を感じています。grepとxargsを使用して、「終わりのない見積もり」エラーを避ける

私は1000ページのページにハードコードされたウェブサイト全体のメールアドレスを置き換えようとしています。これはFreeBSD 6.3サーバ上にあります。

のgrep -R --files-とマッチ '@ domain.com \メール]:ここで

は、私が使用していますコマンドです。 |並べ替え|ユニーク| xargsのperlの-pi -eさん/メール@ domain.com /メール\ @ newdomain.com/\ '* .htmlを

そして、ここでは、私は入れませんエラーです:

xargsの:終端されていない引用

奇妙なことに、3つのファイル(ネストされた構造体)のテストケースでこのコマンドを実行すると、正常に動作します。私はグーグルであり、ほとんどの解決策は、-print0を後に追加することに対処しているようです。 xargsの後には-0が付きます。しかし、これは私が間違った場所に物事を入れていると信じさせるさまざまなエラーをもたらします。

ご協力いただきありがとうございます

答えて

1

なぜxargsにHTMLファイルのリストを提供していますか?そのプログラムは、そのファイルリストをパイプラインから取り出します(grepの出力)。

2

Paxが正しい。 I希望のようなものに、それはさらに正しい:

grep -R --files-with-matches 'Email\@domain.com' . -print0 | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/' 

EDIT:

おかげでkcwuする、これは完全なFreeBSDの:私は、ソートとuniqのを削除しました

grep -R --files-with-matches 'Email\@domain.com' . --null | xargs -0 perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/' 

注意。 --files-without-matchは、最初の一致で停止するように文書化されているので、重複したファイルは取得されません。 POSIXはファイル名に改行を含めることができるので、-print0と-0は、nullで終わるファイルリストを確実に(扱います)、重要です。パラレル

sed -i s/Email\@domain.com/Email\@newdomain.com/g 
+0

お返事ありがとうございます。 -print0を追加しようとすると、次のようになります。 jhmail#grep -R --files-with-matches 'FineArt \ @ westliveson.com' -print0 | grep:無効なオプション - p 使用法:grep [オプション] ...パターン[ファイル] ../pageArray/ @ westliveson.com/FA \ @ westliveson.com/' grep:無効なオプション - p 。 詳細については、 'grep --help 'を試してください。 –

+1

FreeBSDでは、 "-print0"の代わりに "--null"を使用してください。 – kcwu

+0

完璧!あなたのお役に立ててくれてありがとう。とても有難い。 –

0

利用GNU:

grep -R --files-with-matches 'Email\@domain.com' . | sort | uniq | parallel -q perl -pi -e 's/Email\@domain.com/Email\@newdomain.com/g' 

ウォッチより多くを学ぶためのイントロビデオ私はPerlを知らないが、私はその部分のは、ほぼ同じと仮定してい

注: http://www.youtube.com/watch?v=OpaiGYxkSuQ

関連する問題