改进sed中的正则表达式以替换与string = value匹配的值

时间:2012-04-10 06:10:54

标签: sed

我需要替换匹配string = value的值 所以这就是我想出来的:

echo "some string=oldvalue" | sed 's/\(some string\=\)(.*)/\1newvalue/'

它工作正常,我只是想知道是否有更好,更短的方法来完成相同的

TIA

2 个答案:

答案 0 :(得分:2)

如果some_string是常量值,请使用:

sed 's/some string=.*/some string=newvalue/'

根据以下成绩单:

pax> echo "some string=oldvalue" | sed 's/some string=.*/some string=newvalue/'
some string=newvalue

但您可能需要考虑使用开始标记,这样您就不会选择其他键:

sed 's/^some string=.*/some string=newvalue/'

如果您想保留线的其余部分(例如,在空格之后),请使用:

pax> echo "string=old # comment" | sed 's/string=[^ ]*/string=newvalue/'
string=newvalue # comment

这可以通过将=之后的项目限制为非空格字符来实现。

答案 1 :(得分:1)

如果该值不能包含任何= s,则执行起来更短:

sed 's/=.*/=NEW VALUE/'