我的目标是通过 ack 查找所有出现的“<?=
”。我怎样才能做到这一点?
ack "<?="
不起作用。请告诉我如何解决这里的转义问题?
最佳答案
自 ack
使用 Perl 正则表达式,您的问题源于这样一个事实:在 Perl RegEx 语言中,?
是一个特殊字符,表示“最后一个匹配是可选的”。所以你正在寻找的是 =
前面是可选的 <
所以你需要转义 ?
如果这只是一个普通角色的话。
要逃脱,有两种方法 - 要么 <\?=
或<[?]=
;有些人发现第二种形式的转义(将特殊字符放入字符类中)比反斜杠转义更具可读性。
更新 正如 Josh Kelley 在评论中慷慨地添加的那样,第三种转义形式是使用 \Q
转义所有以下特殊字符的运算符,直到 \E
遇到,如下:\Q<?=\E
关于perl - ack-grep : chars escaping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074122/