2013-02-12 40 views

回答

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) 

(在最后一组匹配零位)

0

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

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

相关问题