当我使用sed并使用像这样的大括号时
sed -re 's/top([0-9]+)//g'
我为此工作,但我看到有时我需要逃避括号,有时它可以逃脱。为什么会这样?
为什么\ w不适用于awk
答案 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
中有效。您尝试了什么,您期望的输出是什么以及您获得了什么输出?