未使用 sed 获得惰性求值

未使用 sed 获得惰性求值

我本以为会出现“a”,为什么是“a:b”?

$ echo "a:b:c" | sed -E 's/(.+?):.+/\1/'
a:b

答案1

大多数版本sed不支持 perl 风格的正则表达式(据我所知,唯一支持的是“super sed”,ssed,并且自 2005 年以来就没有更新过),并且不支持?非贪婪修饰符。

如果您想使用确切的正则表达式,最简单的解决方案是使用perl

$ echo "a:b:c" | perl -pe 's/(.+?):.+/$1/'
a

否则,修改正则表达式,以便捕获匹配任何字符除了冒号:

$ echo "a:b:c" | sed -E 's/([^:]+):.+/\1/'
a

相关内容