コマンドの出力を sed の検索パターンとして使用する必要があります。echo を使用して例を作成しますが、これはより複雑なコマンドになる可能性があると想定しています。
echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
「一部のパターン」に空白があるため、そのコマンドは機能しませんが、それは私の問題を明確に示していると思います。
そのコマンドを機能させるにはどうすればよいですか?
前もって感謝します、
-I スイッチで何を置き換えるかを xargs に伝える必要があります。少なくとも一部のバージョンでは、{} について自動的に認識していないようです。
echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt
これはLinuxで動作します(テスト済み):
find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'
代わりにコマンド置換を使用すると、例は次のようになります。
sed -i "s/$(echo "some pattern")/replacement/g" file.txt
二重引用符を使用すると、スペースが分割されないようにしながら、コマンド置換を機能させることができます。
これはうまくいくかもしれません(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