25

コマンドの出力を sed の検索パターンとして使用する必要があります。echo を使用して例を作成しますが、これはより複雑なコマンドになる可能性があると想定しています。

echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt

「一部のパターン」に空白があるため、そのコマンドは機能しませんが、それは私の問題を明確に示していると思います。

そのコマンドを機能させるにはどうすればよいですか?

前もって感謝します、

4

4 に答える 4

35

-I スイッチで何を置き換えるかを xargs に伝える必要があります。少なくとも一部のバージョンでは、{} について自動的に認識していないようです。

echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt
于 2013-01-18T16:23:03.360 に答える
11

これはLinuxで動作します(テスト済み):

find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g' 
于 2014-05-07T19:43:47.423 に答える
8

代わりにコマンド置換を使用すると、例は次のようになります。

sed -i "s/$(echo "some pattern")/replacement/g" file.txt

二重引用符を使用すると、スペースが分割されないようにしながら、コマンド置換を機能させることができます。

于 2013-01-18T16:16:31.860 に答える
1

これはうまくいくかもしれません(GNU sed):

echo "some pattern" | sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt

基本的に、some patternを sed 置換コマンドに変換し、パイプを介して別の sed 呼び出しにフィードします。最後の sed 呼び出しは、-fファイル経由で sed コマンドを受け入れるスイッチを使用します。この場合、ファイルは標準入力-です。

bash を使用している場合は、以下を使用here-stringできます。

<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt

注意: sed の区切り文字|であり、正規表現が適切に形成されないため/、その一部であってはなりません。some pattern

于 2013-01-20T09:12:37.047 に答える