当我使用SED和使用大括号这样为什么我需要在sed有时逃生()
sed -re 's/top([0-9]+)//g'
我工作了这一点,但我有时看到我需要逃避括号,有时没有逃脱的作品。这是为什么
为什么\ W不使用awk
当我使用SED和使用大括号这样为什么我需要在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
中工作。你试过了什么,你期望输出什么,你得到了什么输出?