有人可以解释这个 sed 命令吗?

Can someone explain this sed command?

所以正文如下:

1a fost odata
2un balaur
care fura
mere de aur

使用此命令后:

sed 's/\([a-z]*\)\(.*\)\( [a-z]*\)/ ... /' filename

结果是这样的:

... 1a fost
 ... 2un balaur
care ...
mere ...  de

我知道 </code> 是第一个 <code>[a-z]* 子表达式等等,但我就是想不通。还有,第一个子表达式和最后一个子表达式有什么区别一?为什么[a-z]前面有一个space?

第一个 [a-z]* 匹配行中的第一个字母序列。 * 量词匹配 0 次或多次重复,因此也可以匹配空字符串。

第一行匹配1a之前的空字符串。在第二行,它匹配 2un 之前的空字符串。在第三行它匹配 care,在第四行它匹配 mere。这些比赛将进入捕获组 1。

.* 匹配零个或多个任意字符,因此这将跳过行中间的所有内容。这些匹配进入捕获组 2。

[a-z]* 匹配 space 后跟零个或多个字母。需要 space 才能使 .* 在到达行中的最后一个 space 时停止匹配。这些匹配进入捕获组 3。

替换为捕获组 1 和 2,它们之间有 ...。这是行首的字母,...,然后是除最后一个单词之外的所有字母。