0

我正在尝试从“123 var1=test1 var2=test2 456”中删除“var1=test1”

出于某种原因,结果也删除了 var2=test2... 为什么会发生这种情况,我该如何解决?

回声 123 var1=test1 var2=test2 456 | sed "s/var1=.* //g"

结果是:123 456

谢谢!

4

3 回答 3

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

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

于 2013-03-13T22:22:52.123 回答
1

那是因为/.* /捕获所有内容,包括最后一个空格。相反,尝试

sed "s/var1=[^ ]*//g"

删除之后的所有内容,=不是空格。

于 2013-03-13T22:23:16.367 回答
0

发生这种情况是因为 .* 是贪婪的。由于第一个空格应该结束它,请使用:

s/var1=[^ ]* //g

你可能想把那个放在单引号中,以防你的 shell 想要对 ^ 做一些事情

于 2013-03-13T22:23:14.603 回答