Bash 使用SED删除X=和空格之间的文本意外行为
我试图从“123 var1=test1 var2=test2 456”中删除“var1=test1” 出于某种原因,结果还删除了var2=test2。。。为什么会发生这种情况?我如何修复它 echo 123 var1=test1 var2=test2 456 | sed“s/var1=.*//g” 结果是: 123 456 谢谢大家!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' 您的错误是使用贪婪的*匹配到最后一
echo '123 var1=test1 var2=test2 456' | sed -r 's/var1=\S+ //g'
您的错误是使用贪婪的
*
匹配到最后一个空格。相反,我搜索非空格\S
因为。*是贪婪的。因为第一个空格应该结束它,所以使用:
s/var1=[^ ]* //g
您可能希望将其放在单引号中,以防shell想要对^执行某些操作,这是因为
/.*/
捕获最后一个空格之前的所有内容。相反,试试看
sed "s/var1=[^ ]*//g"
删除=
后面不是空格的所有内容