【发布时间】:2013-02-12 17:27:51
【问题描述】:
当我使用 sed 并使用这样的大括号时
sed -re 's/top([0-9]+)//g'
我为此工作,但我看到有时我需要转义大括号,有时它可以在没有转义的情况下工作。为什么会这样
为什么 \w 不能与 awk 一起使用
【问题讨论】:
当我使用 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 中工作。你尝试了什么,你期望什么输出,你得到了什么输出?
【讨论】: