Bash 使用SED删除X=和空格之间的文本意外行为

Bash 使用SED删除X=和空格之间的文本意外行为,bash,replace,sed,Bash,Replace,Sed,我试图从“123 var1=test1 var2=test2 456”中删除“var1=test1” 出于某种原因,结果还删除了var2=test2。。。为什么会发生这种情况?我如何修复它 echo 123 var1=test1 var2=test2 456 | sed“s/var1=.*//g” 结果是: 123 456 谢谢大家! echo '123 var1=test1 var2=test2 456' | sed -r 's/var1=\S+ //g' 您的错误是使用贪婪的*匹配到最后一

我试图从“123 var1=test1 var2=test2 456”中删除“var1=test1”

出于某种原因,结果还删除了var2=test2。。。为什么会发生这种情况?我如何修复它

echo 123 var1=test1 var2=test2 456 | sed“s/var1=.*//g”

结果是: 123 456

谢谢大家!

echo '123 var1=test1 var2=test2 456' | sed -r 's/var1=\S+ //g'

您的错误是使用贪婪的
*
匹配到最后一个空格。相反,我搜索非空格
\S

因为。*是贪婪的。因为第一个空格应该结束它,所以使用:

s/var1=[^ ]* //g

您可能希望将其放在单引号中,以防shell想要对^

执行某些操作,这是因为
/.*/
捕获最后一个空格之前的所有内容。相反,试试看

sed "s/var1=[^ ]*//g"
删除
=
后面不是空格的所有内容