我的目标是用ackfind所有“ <?=
”事件。 我怎样才能做到这一点?
ack "<?="
不起作用。 请告诉我如何修复在这里逃跑?
由于ack
使用Perl正则表达式,您的问题源于在Perl正则表达式语言中, ?
是一个特殊的字符意思是“最后匹配是可选的”。 所以,你在寻找的是一个可选的<
所以你需要逃避?
如果这只是一个普通的人物。
为了逃避,有两种方法 – 或者<\?=
或<[?]=
; 有些人发现第二种转义形式(将特殊字符放入字符类中)比反斜杠转义更具可读性。
更新由于Josh Kelley在评论中慷慨地加入了,第三种转义形式是使用\Q
运算符,它会转义所有下列特殊字符,直到遇到\E
,如下所示: \Q<?=\E
而不是试图记住哪些字符必须转义,你可以使用-Q引用需要引用的所有内容。
ack -Q "<?="
如果您想通过简单的文本查找,这是最好的解决方案。
(如果你不需要通过正则表达式找到)。
ack "<\?="
? 是一个正则表达式运算符,所以它需要转义