ack-grep:chars escaping

use*_*805 21 unix perl grep ack

我的目标是<?=用ack 找到所有" "事件.我怎样才能做到这一点?

ack "<?="
Run Code Online (Sandbox Code Playgroud)

不行.请告诉我如何解决逃避问题?

DVK*_*DVK 28

由于ack使用Perl正则表达式,您的问题源于在Perl RegEx语言中,这?是一个特殊字符,意思是"最后匹配是可选的".所以你要点击的是=一个可选的<

所以你需要逃避,?如果这只是一个普通的角色.

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

更新正如Josh Kelley在评论中慷慨地添加的那样,第三种形式的转义是使用\Q运算符,它会逃脱所有以下特殊字符,直到\E遇到,如下所示:\Q<?=\E

  • 或者使用-Q选项来逃避所有特殊字符,因为真的,谁想要弄乱\ Q\E垃圾? (16认同)
  • 或者使用`\ Q <?=\E`来转义所有特殊字符. (4认同)

And*_*ter 19

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


小智 14

ack -Q "<?="
Run Code Online (Sandbox Code Playgroud)

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

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


Jam*_*ong 7

ack "<\?="
Run Code Online (Sandbox Code Playgroud)

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