sed中的\1做什么?

sed中的\1做什么?,sed,Sed,我发现这个问题确实与我想要的有关:,但是我不知道下面的问题是什么: 's/\([,=]\) /\1/g' 我知道g做了一个全局替换,但真的无法理解在问题的上下文中发生了什么。\(…\)将捕获paren中指定的字符,并且\1将用于引用第一个匹配,这是regex的一部分。这里有一个简单的示例: $ echo 'abcabcabc' | sed 's/\(ab\)c/\1/' ababcabc $ echo 'abcabcabc' | sed 's/\(ab\)c/\1/g' ababab $ ec

我发现这个问题确实与我想要的有关:,但是我不知道下面的问题是什么:

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

我知道g做了一个全局替换,但真的无法理解在问题的上下文中发生了什么。

\(…\)
将捕获paren中指定的字符,并且
\1
将用于引用第一个匹配,这是regex的一部分。

这里有一个简单的示例:

$ 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
会将匹配的参数放回原处,其中不包括空格。如果只引用第一个匹配项,则需要/g吗?注意:如果将扩展正则表达式与
sed-E
一起使用,则不需要将括号与反斜杠隔开。\\1在做什么,它是扩展正则表达式吗?下面是\\1:
sed-E-E“s/[^/]{10}(\\\.[^\]+)?$/\\1/”
@Timo:
\1
插入第一个捕获组的内容,这是第一组括号之间匹配的内容。我不知道你是否在特别询问反斜杠加倍的情况,但不管反斜杠加倍与否似乎都有效。我不会说这是扩展正则表达式的情况,因为即使使用基本正则表达式,它也会做同样的事情。