运行时:
echo "abcd/fgh/ijkl" | sed 's|[^/]*/\(.*\)|\1|'
预期的输出是
fgh/ijkl
但在运行时:
echo "abcd" | sed 's|[^/]*/\(.*\)|\1|'
输出
abcd
而不是预期的空字符串。即使字符串中没有/
,为什么这匹配。这是由于正则表达式的贪婪。如何让它正常工作?
答案 0 :(得分:3)
不匹配。 sed
中的替换只会在匹配的行上运行,默认情况下sed
会打印所有行。尝试
echo "abcd" | sed -n 's|[^/]*/\(.*\)|\1|p'
-n
标志表示“默认情况下无输出”,并且只要进行替换,最后的p
修饰符就会打印出来。