【发布时间】:2017-04-11 14:09:33
【问题描述】:
我刚刚开始使用 sed 进行试验,但并不真正了解匹配捕获是如何工作的:如果我有这样的代码来捕获两个单词 sed 's/\([a-z]*\).*\([a-z]*\).*/\1 \2/' 为什么没有捕获第二个单词?
Edit1:假设我有这个字符串:“棕狐跳过懒狗”。我想让 sed 匹配“棕色”,但它只匹配第一个单词
【问题讨论】:
-
给我们上面
sed命令不起作用的字符串(或)输入文件 -
*是贪婪的.. 它会尝试尽可能多地匹配.. 虽然必须匹配整个表达式,但首选是让表达式首先匹配......并且作为@ 987654325@ 表示零个或多个匹配,.*或[a-z]*可以为空 -
用空格符替换
.*中的点...sed 's/\([a-z]*\) *\([a-z]*\).*/\1 \2/' -
谢谢 Sundeep,成功了!
-
如果您使用
+而不是*,它将需要“至少一个”,而不是“零或多个”。这对你也可能有用。最好编写正则表达式,这样对于要匹配的任何文本,只有一种匹配方式。不要让 sed 猜测你想如何匹配,否则它会变慢:stackoverflow.com/documentation/regex/977/backtracking/3180/…
标签: sed