1

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

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

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

4

2 回答 2

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)

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

于 2013-02-12T09:22:11.227 回答
0

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

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

于 2013-02-12T09:24:36.890 回答