1

我已经尝试了几十种不同的 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
4

1 回答 1

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
于 2013-09-30T17:32:54.537 回答