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

Neu*_*ino 15 bash replace pipeline sed

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

echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
Run Code Online (Sandbox Code Playgroud)

该命令不起作用,因为"某些模式"有一个空格,但我认为这清楚地说明了我的问题.

如何使该命令有效?

提前致谢,

Wee*_*etu 19

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

echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt
Run Code Online (Sandbox Code Playgroud)


Ste*_*eve 8

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

sed -i "s/$(echo "some pattern")/replacement/g" file.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是被问到的。作者本可以发明简化的例子来更好地隔离他所询问的逻辑。此外,专门搜索如何在 xargs 中使用 sed 的人访问了这个问题(因为问题标题),这并没有提供答案。 (5认同)

ale*_*lex 7

这适用于Linux(已测试):

find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g' 
Run Code Online (Sandbox Code Playgroud)