以下脚本用于修剪行尾的t
echo "test"|perl -pe "s/t(?=$)//g"
tes #sucess
echo "test"|perl -pe "s/t(?=[\\$])//g"
test #fail
为什么第二个失败?结果不应该是“tes”吗?
答案 0 :(得分:2)
它不起作用,因为在第一个脚本中$
是行锚点,但在第二个脚本中,因为它包含在一个字符类中, $
被视为字面意思。
请注意,在第一个脚本中,使用前瞻是没用的,因为$
本身是零宽度断言,因此t$
将完全匹配相同的子字符串。
答案 1 :(得分:1)
在第一种情况下,$
是字符串的结尾。在第二种情况下,它是$
自我标志。