【问题标题】:ack-grep: chars escapingack-grep:字符转义
【发布时间】:2011-03-05 16:27:10
【问题描述】:

我的目标是使用 ack 找到所有出现的“<?=”。我该怎么做?

ack "<?="

不起作用。请告诉我如何解决这里的转义问题?

【问题讨论】:

    标签: perl unix grep ack


    【解决方案1】:
    ack -Q "<?="
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        由于ack 使用Perl 正则表达式,您的问题源于在Perl RegEx 语言中,? 是一个特殊字符,意思是“最后一个匹配是可选的”。所以你正在寻找的是= 前面是可选的&lt;

        所以你需要转义 ? 如果这只是一个普通字符。

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

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

        【讨论】:

        • 或使用\Q&lt;?=\E 转义所有特殊字符。
        • 或者也可以使用 -Q 选项来转义所有特殊字符,因为真的,谁想弄乱 \Q \E 废话?
        【解决方案4】:
        ack "<\?="
        

        ?是一个正则表达式操作符,所以需要转义

        【讨论】:

          猜你喜欢
          • 2011-06-13
          • 1970-01-01
          • 1970-01-01
          • 2011-12-27
          • 2015-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-09
          相关资源
          最近更新 更多