为什么正则表达式显示匹配,即使其中一个字符不在字符串中?

时间:2014-05-13 13:53:07

标签: regex shell sed

运行时:

echo "abcd/fgh/ijkl" | sed 's|[^/]*/\(.*\)|\1|'

预期的输出是

fgh/ijkl

但在运行时:

echo "abcd" | sed 's|[^/]*/\(.*\)|\1|'

输出

abcd

而不是预期的空字符串。即使字符串中没有/,为什么这匹配。这是由于正则表达式的贪婪。如何让它正常工作?

1 个答案:

答案 0 :(得分:3)

不匹配。 sed中的替换只会在匹配的行上运行,默认情况下sed会打印所有行。尝试

echo "abcd" | sed -n 's|[^/]*/\(.*\)|\1|p'

-n标志表示“默认情况下无输出”,并且只要进行替换,最后的p修饰符就会打印出来。