正则表达式:将$放入[]

时间:2014-10-16 08:12:38

标签: regex perl

echo "tests"|perl -pe "s/s[t$]//g"
Unmatched [ in regex; marked by <-- HERE in m/s[ <-- HERE 5.020000/ at -e line 1, <> line 1.

我不能将$放入[ ]吗?为什么?还有其他方法可以匹配t$吗?

3 个答案:

答案 0 :(得分:4)

注意错误消息中的正则表达式(删除标记后):

m/s[5.020000/

这为我们提供了有关正在发生的事情的线索。在评估正则表达式之前,$]已替换为5.020000。参考man perlvar,我们可以看到$]是一个特殊变量:

  

Perl解释器的版本+ patchlevel / 1000。

要防止变量扩展,请添加一些转义:

echo "tests" | perl -pe 's/t[s\$]//g'

这将删除ts或文字t$。如果您希望$代表该行的结尾(以修剪testtests),请使用:

echo -e "tests\ntest" | perl -pe 's/t(s|$)//g'

或使s可选:

echo -e "tests\ntest" | perl -pe 's/ts?$//g'

答案 1 :(得分:2)

你必须逃避$标志,因为它是一个特殊字符:

echo "tests"|perl -pe "s/s[t\\$]//g"

答案 2 :(得分:0)

或者,将sed与您的表达式一起使用:

echo "tests"| sed "s/s[t$]//g"