コマンドの出力をsedの検索パターンとして使用する必要があります。エコーを使用して例を作成しますが、これはより複雑なコマンドになる可能性があると想定します。
echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
「一部のパターン」には空白があるため、このコマンドは機能しませんが、問題を明確に示していると思います。
そのコマンドを機能させるにはどうすればよいですか?
前もって感謝します、
代わりにコマンド置換を使用すると、例は次のようになります。
sed -i "s/$(echo "some pattern")/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'
これはあなたのために働くかもしれません(GNU sed):
echo "some pattern" | sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt
基本的にsome pattern
をsed置換コマンドに変換し、パイプを介して別のsed呼び出しにフィードします。最後のsed呼び出しは、ファイルを介してsedコマンドを受け入れる-f
スイッチを使用します。この場合、ファイルは標準入力-
です。
Bashを使用している場合は、here-string
を使用できます。
<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt
N.B. sedセパレータ|
および/
はsome pattern
の一部であってはなりません。そうでない場合、正規表現が適切に形成されません。