ack-grep:chars escaping

时间:2010-06-19 02:48:44

标签: perl unix grep ack

我的目标是用ack查找所有“<?=”事件。我怎么能这样做?

ack "<?="

不起作用。请告诉我如何解决逃避问题?

4 个答案:

答案 0 :(得分:28)

由于ack使用Perl正则表达式,因此问题源于这样一个事实,即在Perl RegEx语言中,?是一个特殊字符,意思是“最后一个匹配是可选的”。因此,您要点击的是=,前面是可选的<

所以你需要逃脱?,如果这只是一个普通角色。

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

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

答案 1 :(得分:18)

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

答案 2 :(得分:12)

ack -Q "<?="

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

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

答案 3 :(得分:7)

ack "<\?="

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