我正在尝试在 os x 终端中使用 perl 进行文本搜索和替换。我正在尝试使用以下行将特殊字符字符串“!@#$%^&*()”替换为字符串“特殊字符”:
perl -p -e 's/\Q!@#$%^&*()\E/special characters/g' 'hello.txt' > 'hello_new.txt'
但是它不起作用。\Q 在 OS X 上不起作用吗?它应该禁用正则表达式模式匹配。我不想自己逃离角色。我做错了什么?
最佳答案
$%
perlvar
中的特殊变量并且正在被插值。
您可以通过简单地将 LHS 作为字符串输出来确认这一点:
$ perl -MData::Dump -E 'dd "\Q!@#$%^&*()\E"'
"\\!\\\@\\#0\\^\\&\\*\\(\\)"
要解决此问题,您只需转义正则表达式的 LHS 中的 $
即可:
perl -pe 's/\Q!@#\$%^&*()\E/special characters/g' 'hello.txt' > 'hello_new.txt'
关于regex - perl 正则表达式\Q mac os x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33979470/