Bash 如何在搜索模式中使用带sed的xargs

Bash 如何在搜索模式中使用带sed的xargs,bash,sed,replace,pipeline,Bash,Sed,Replace,Pipeline,我需要使用命令的输出作为sed中的搜索模式。我将使用echo做一个示例,但假设这可能是一个更复杂的命令: echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt 这个命令不起作用,因为“某些模式”有一个空格,但我认为这清楚地说明了我的问题 我怎样才能使这个命令起作用 提前感谢,使用命令替换,因此您的示例如下所示: sed -i "s/$(echo "some pattern")/replacement/g" file.t

我需要使用命令的输出作为sed中的搜索模式。我将使用echo做一个示例,但假设这可能是一个更复杂的命令:

echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
这个命令不起作用,因为“某些模式”有一个空格,但我认为这清楚地说明了我的问题

我怎样才能使这个命令起作用


提前感谢,

使用命令替换,因此您的示例如下所示:

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

双引号允许命令替换工作,同时防止拆分空格。

您需要告诉xargs用-I开关替换什么-它似乎不自动知道{},至少在某些版本中是这样

echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt
这可能适用于您(GNU-sed):

本质上,将
some模式
转换为sed替换命令,并通过管道将其提供给另一个sed调用。最后一次sed调用使用
-f
开关,该开关通过文件接受sed命令,本例中的文件是标准输入
-

如果您使用的是bash,则可以使用
here字符串

<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt
这在Linux上工作(已测试):


这不是被问到的。作者本可以发明一个简化的例子来更好地分离他所问的逻辑。此外,在xargs中搜索如何使用sed的人会访问这个问题(因为问题的标题),但这并不能提供答案。
<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt
find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g'