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