替换不同字符串的结尾

时间:2013-09-30 17:28:56

标签: regex bash sed

我已经尝试了几十种不同的sed选项,但还没有找到可行的组合。我想转:

test(3) = var
other(8) = var
test(13) = var
...

成:

test(3) = newvar
other(8) = var
test(13) = newvar
...

我遇到的问题是括号中的变化值。我想在之后编辑,以防止必须捕获并分配它。我尝试了以下方法,认为我可以在括号内使用.*作为通配符,但我似乎无法让它工作。

sed -n "s/\(test(.*\)\s+\w+/\1) = newstuff/g" file.txt

1 个答案:

答案 0 :(得分:3)

您可以使用此sed命令:

sed -i.bak 's/^\([^=]* *= *\).*$/\1newvar/' file

这将匹配RHS字符串(从开始到找到=)并由newvar替换

如果要使用shell变量,请使用双引号:

NEWVAR="something"
sed -i.bak "s/^\([^=]* *= *\).*$/\1$NEWVAR/" file

更新:仅更改以test开头的行:

sed -i.bak "s/^\( *test *[^=]* *= *\).*$/\1$NEWVAR/" file