【发布时间】:2011-03-22 01:10:32
【问题描述】:
如何使用 sed 替换一行中的几个匹配项?
我有一个带有文本的 file.log:
sometext1;/somepath1/somepath_abc123/somepath3/file1.a;/somepath1/somepath_abc123/somepath3/file1.o;/somepath1/somepath_abc123/somepath3/file1.cpp; sometext2;/somepath1/somepath_abc123/somepath3/file2.a;/somepath/somepath_abc123/somepath3/file2.o;/somepath1/somepath_abc123/somepath3/file2.cpp;我正在尝试替换每一行中的somepath1/somepath_abc123/somepath3。
但结果不太可能是错误的:
sometext1;/mysomepath1/mysomepath2/mysomepath3/file1.cpp; sometext2;/mysomepath1/mysomepath2/mysomepath3/file2.cpp;如您所见,sed 只返回最后一个匹配项。
我尝试了以下代码:
#!/bin/sh 文件="文件.log" OLD="somepath1\/somepath_.*\/somepath3" NEW="mysomepath1\/mysomepath2\/mysomepath3" sed 's|'"$OLD"'|'"$NEW"'|g' $FILE > $FILE.out表达有什么问题?
【问题讨论】:
-
那是因为你 sed 正则表达式是贪婪的。