使用sed捕获匹配

使用sed捕获匹配,sed,Sed,我刚刚开始使用sed进行实验,并没有真正了解匹配捕获是如何工作的:如果我有这样的代码来捕获两个单词sed的/\([a-z]*\).\([a-z]*\)./\1\2/'为什么第二个单词没有被捕获 Edit1:假设我有一根绳子:“棕色的狐狸跳过了懒狗”。我想让sed与“thebrown”匹配,但它只匹配第一个单词(引用Sundeep,只是为了做一对Q/a。) 将*中的点替换为空格字符 sed 's/\([a-z]*\) *\([a-z]*\).*/\1 \2/' 为我们提供上面的sed命令无法使用

我刚刚开始使用sed进行实验,并没有真正了解匹配捕获是如何工作的:如果我有这样的代码来捕获两个单词
sed的/\([a-z]*\).\([a-z]*\)./\1\2/'
为什么第二个单词没有被捕获

Edit1:假设我有一根绳子:“棕色的狐狸跳过了懒狗”。我想让sed与“thebrown”匹配,但它只匹配第一个单词(引用Sundeep,只是为了做一对Q/a。)


*
中的点替换为空格字符

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

为我们提供上面的
sed
命令无法使用的字符串(或)输入文件
*
是贪婪的。。它将尽可能地匹配。。虽然整个表达式必须匹配,但首选的是左侧的表达式首先匹配。。。由于
*
表示零或更多匹配,因此
*
[a-z]*
为空完全可以用空格字符替换
*
中的点
sed的/\([a-z]*\)*\([a-z]*\)./\1\2/'
谢谢Sundeep,让它工作起来了!如果您使用
+
而不是
*
,则需要“至少一个”,而不是“零个或多个”。这对你也有帮助。最好是编写正则表达式,以便对于任何要匹配的文本,只有一种匹配方法。不要让sed猜测您想要匹配的方式,否则它会变慢:为了更好的回溯安全性,请使用`{1,}`而不是`*`。我希望这不是延长期限。