为什么我需要在sed中逃脱()

时间:2013-02-12 09:16:06

标签: linux sed awk

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

sed -re 's/top([0-9]+)//g'
  1. 我为此工作,但我看到有时我需要逃避括号,有时它可以逃脱。为什么会这样?

  2. 为什么\ w不适用于awk

2 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:0)

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

\w应该在awk中有效。您尝试了什么,您期望的输出是什么以及您获得了什么输出?