2012-02-29 8 views
1

私は何時間もこれを行ってきましたが、何故このコマンドが目的の文字列を置き換えないのかわかりません。私がしようとしている。このgrepまたはfindとsedを使用して文字列を置き換えます。

grep -r -l 'first\.second\.third\.fourth' . | xargs -i -e sed's/first\.second\.third\.fourth/foo\.bar\.fooey/g' 

ので、私は再帰的にファイルの多くが付いているフォルダを検索し、"foo.bar.fooey""first.second.third.fourth"に変更されて何をしようとしています。 grepとsedコマンドを実行した後、 "first.second.third.fourth"が見つからないことを確認するために再度grepしますが、それは何度も同じように私が信じているものです。だから、私はちょっと気分がいい。

ご協力いただければ幸いです。みんな、ありがとう。

答えて

3

-iは、xargsではなくsedの引数にする必要があります。そして、@ potongが指摘するように、 "。" sedの一致文字列内の文字はエスケープする必要があります。

grep -r -l 'first.second.third.fourth' . | xargs sed -i 's/first\.second\.third\.fourth/foo.bar.fooey/g' 
+1

sedの置換コマンドのLHSにある "。"は、任意の1文字と一致することを忘れないでください。ピリオドにマッチさせるには '\ .' – potong

+0

@potongを使用してください。そうではありません。編集中... – Beta

+0

@potongあなたは間違いなしです。私はそれを私の端末に持っていたが、私がそれをコピーしたとき、それは転送をしなかった...私のせいだ。 – bdc

0

なぜfind/sedシングルを使わないのでしょうか?

+0

私は彼が文字列のすべてのインスタンスを変更しようとしていると思います。名前がパターンに一致するファイル内の文字列だけではありません。 (私は、影響を受けていないファイルのタイムスタンプを変更するのを避けるために、彼はフィルタの代わりにgrepを使用していると推測しています)。 – Beta

+0

すべてのファイルに対して、 '--iname" * YOURFILENAME * "パターンを残してください。 –

関連する問題