我的目标是用ack查找所有“<?=
”事件。我怎么能这样做?
ack "<?="
不起作用。请告诉我如何解决逃避问题?
答案 0 :(得分:28)
由于ack
使用Perl正则表达式,因此问题源于这样一个事实,即在Perl RegEx语言中,?
是一个特殊字符,意思是“最后一个匹配是可选的”。因此,您要点击的是=
,前面是可选的<
所以你需要逃脱?
,如果这只是一个普通角色。
要逃避,有两种方法 - <\?=
或<[?]=
;有些人发现第二种形式的转义(将特殊字符放入字符类)比反斜杠转义更具可读性。
更新正如Josh Kelley在评论中慷慨地补充的那样,第三种转义形式是使用\Q
运算符,该运算符会逃脱以下所有特殊字符,直到遇到\E
为止,如下:\Q<?=\E
答案 1 :(得分:18)
您可以使用-Q来引用需要引用的所有内容,而不是试图记住哪些字符必须被转义。
答案 2 :(得分:12)
ack -Q "<?="
如果您想通过简单的文字找到,这是最好的解决方案。
(如果你不需要通过正则表达式找到。)
答案 3 :(得分:7)
ack "<\?="
?是一个正则表达式运算符,所以它需要转义