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
或$
吗?
答案 0 :(得分:4)
注意错误消息中的正则表达式(删除标记后):
m/s[5.020000/
这为我们提供了有关正在发生的事情的线索。在评估正则表达式之前,$]
已替换为5.020000
。参考man perlvar
,我们可以看到$]
是一个特殊变量:
Perl解释器的版本+ patchlevel / 1000。
要防止变量扩展,请添加一些转义:
echo "tests" | perl -pe 's/t[s\$]//g'
这将删除ts
或文字t$
。如果您希望$
代表该行的结尾(以修剪test
和tests
),请使用:
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"