当我使用 sed 并使用这样的大括号时
sed -re 's/top([0-9]+)//g'
我为此工作,但我看到有时我需要逃避大括号,有时它可以在没有逃避的情况下工作。这是为什么
为什么 \w 不适用于 awk
这取决于-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)
(在最后一个中,组匹配零位)
在经典的正则表达式sed
使用中,您必须对括号进行反斜杠以赋予它们特殊含义。如果您sed
支持-r
,它可以使用“扩展”正则表达式,其中括号具有特殊含义而没有反斜杠,反斜杠会使它们失去意义。
\w
应该在awk
. 你尝试了什么,你期望什么输出,你得到了什么输出?