ack-grep:字符逃跑

我的目标是用ackfind所有“ <?= ”事件。 我怎样才能做到这一点?

 ack "<?=" 

不起作用。 请告诉我如何修复在这里逃跑?

由于ack使用Perl正则表达式,您的问题源于在Perl正则表达式语言中, ? 是一个特殊的字符意思是“最后匹配是可选的”。 所以,你在寻找的是一个可选的<

所以你需要逃避? 如果这只是一个普通的人物。

为了逃避,有两种方法 – 或者<\?=<[?]= ; 有些人发现第二种转义形式(将特殊字符放入字符类中)比反斜杠转义更具可读性。

更新由于Josh Kelley在评论中慷慨地加入了,第三种转义形式是使用\Q运算符,它会转义所有下列特殊字符,直到遇到\E ,如下所示: \Q<?=\E

而不是试图记住哪些字符必须转义,你可以使用-Q引用需要引用的所有内容。

 ack -Q "<?=" 

如果您想通过简单的文本查找,这是最好的解决方案。

(如果你不需要通过正则表达式找到)。

 ack "<\?=" 

? 是一个正则表达式运算符,所以它需要转义