2013-09-30 155 views
1

我试过几十种不同的sed选项,但还没有找到可用的组合。我试图把:替换不同字符串的结尾

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

到:

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

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

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

(直到=发现从开始)这将匹配RHS字符串,由newvar

代替:

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

为什么不只是做单曲的/ var/newvar /'? –

+0

对不起,这是一个MWE,可能有点太简单。我不能这样做,因为'var'正在改变('newvar'存储在一个数组中)。 – Blink

回答

3

您可以使用此sed命令shell变量,然后使用双引号:

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

UPDATE:只改变开始的行test

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

是的,这绝对有效。我会在10分钟内标记为正确答案(系统速度太快)。谢谢! – Blink

+0

不客气,很高兴它为你解决。 – anubhava

+1

@William:我根据你编辑的问题更新了答案。 – anubhava

相关问题