【问题标题】:Why i need to escape () sometimes in sed为什么我有时需要在 sed 中转义 ()
【发布时间】:2013-02-12 17:27:51
【问题描述】:

当我使用 sed 并使用这样的大括号时

sed -re 's/top([0-9]+)//g'
  1. 我为此工作,但我看到有时我需要转义大括号,有时它可以在没有转义的情况下工作。为什么会这样

  2. 为什么 \w 不能与 awk 一起使用

【问题讨论】:

    标签: linux sed awk


    【解决方案1】:

    这取决于您使用的-r 开关:

       -r, --regexp-extended
    
              use extended regular expressions in the script.
    

    -r 中的方括号表示捕获的组,要匹配文字方括号,您必须对其进行转义。

    没有-r,反之亦然。

    考虑:

    $ sed -r 's/foo([0-9]*)/\1/' <<<'foo123'
    123
    $ sed 's/foo([0-9]*)/\1/' <<<'foo123'
    sed: -e expression #1, char 17: invalid reference \1 on `s' command's RHS
    $ sed 's/([0-9]*)//' <<<'foo(123)'
    foo
    $ sed 's/foo\([0-9]*\)/\1/' <<<'foo(123)'
    (123)
    

    (在最后一个中,组匹配零位)

    【讨论】:

      【解决方案2】:

      sed 使用的经典正则表达式中,您必须对括号进行反斜杠以赋予它们特殊的含义。如果您的sed 支持-r,它可以使用“扩展”正则表达式,其中括号具有特殊含义没有反斜杠,反斜杠会使它们失去意义。

      \w 应该在 awk 中工作。你尝试了什么,你期望什么输出,你得到了什么输出?

      【讨论】:

        猜你喜欢
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 2015-07-10
        • 1970-01-01
        • 2011-09-03
        相关资源
        最近更新 更多