sed中的\ 1做什么?

时间:2011-01-05 22:42:48

标签: sed

我发现这个问题与我想要的问题非常相关:Parsing using awk or sed in Unix,但我无法弄清楚以下内容:

's/\([,=]\) /\1/g'

我知道g会进行全局替换,但实际上无法理解问题背景下发生了什么。

2 个答案:

答案 0 :(得分:37)

这是一个简单的例子:

$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/'
ababcabc
$ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g'
ababab
$ echo 'abcabcabc' | sed 's/\(ab\)\(c\)/\1d\2/g'
abdcabdcabdc

在第一个命令中,只有第一个匹配受到影响。在第二个命令中,每个匹配都会受到影响。在这两种情况下,\1都指的是转义括号所捕获的字符。

在第三个命令中,指定了两个捕获组。使用\1\2来引用它们。最多可以使用九个捕获组。

除了g(全局)运算符(或没有它,第一个匹配),您可以指定特定匹配:

$ echo 'aaaaaa' | sed 's/a/A/4'
aaaAaa

答案 1 :(得分:13)

\(...\)将捕获在parens中指定的字符,\1将用于引用第一个匹配,这是正则表达式的一部分。