我发现这个问题与我想要的问题非常相关:Parsing using awk or sed in Unix,但我无法弄清楚以下内容:
's/\([,=]\) /\1/g'
我知道g会进行全局替换,但实际上无法理解问题背景下发生了什么。
答案 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
将用于引用第一个匹配,这是正则表达式的一部分。