我正在尝试从“123 var1=test1 var2=test2 456”中删除“var1=test1”
出于某种原因,结果也删除了 var2=test2... 为什么会发生这种情况,我该如何解决?
回声 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
那是因为/.* /
捕获所有内容,包括最后一个空格。相反,尝试
sed "s/var1=[^ ]*//g"
删除之后的所有内容,=
这不是空格。
发生这种情况是因为 .* 是贪婪的。由于第一个空格应该结束它,请使用:
s/var1=[^ ]* //g
你可能想把那个放在单引号中,以防你的 shell 想要对 ^ 做一些事情