使用sed捕获匹配
我刚刚开始使用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的/\([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,}`而不是`*`。我希望这不是延长期限。