我发现我想要的真正相关的这个问题:Parsing using awk or sed in Unix,但我无法弄清楚以下哪些呢:sed中的 1是做什么的?
's/\([,=]\) /\1/g'
我知道,G中全局替换,但实在不明白这是怎么回事在问题的范围内。
我发现我想要的真正相关的这个问题:Parsing using awk or sed in Unix,但我无法弄清楚以下哪些呢:sed中的 1是做什么的?
's/\([,=]\) /\1/g'
我知道,G中全局替换,但实在不明白这是怎么回事在问题的范围内。
这里有一个简单的例子:
$ 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
\(...\)
将捕获在parens内指定的字符,而\1
将用于引用第一个匹配,这是正则表达式的一部分。
很好的回答。我只是想补充一点,这意味着引用的特定示例会删除逗号或等号后面的空格,因为\ 1会放回任何在包含空格之间匹配的空格。 – 2011-01-05 22:52:56
如果你只参考第一场比赛,那么是否需要/ g? – 2011-01-05 22:53:15
aka“back references” – SiegeX 2011-01-05 22:54:03
什么是\\ 1做的,是否扩展了正则表达式? – Timo 2017-12-13 15:48:44
这是\\ 1的示例:'sed -E -e“s/[^ /] {10}(\\。[^ \\。] +)?$/\\ 1 /”' – Timo 2017-12-13 16:03:55
@Timo :'\ 1'插入第一个捕获组的内容,该内容是第一组括号之间匹配的内容。我不知道你是否特别要求使用加倍反斜杠的情况,但无论它们是否加倍,似乎都起作用。我不会说这是一个扩展正则表达式的情况,因为即使在使用基本正则表达式时它也会执行相同的操作。 – 2017-12-13 17:40:10