Regex 替换字符串的结尾
我尝试了几十种不同的sed选项,但还没有找到一种有效的组合。我正试图转向:Regex 替换字符串的结尾,regex,bash,sed,Regex,Bash,Sed,我尝试了几十种不同的sed选项,但还没有找到一种有效的组合。我正试图转向: test(3) = var other(8) = var test(13) = var ... 进入: 我遇到的问题是括号中的值变化。我希望在值之后进行编辑,以避免必须捕获并分配它。我尝试了以下方法,认为我可以使用*作为括号内的通配符,但似乎无法使其工作 sed -n "s/\(test(.*\)\s+\w+/\1) = newstuff/g" file.txt 您可以使用以下sed命令: sed -i.bak 's
test(3) = var
other(8) = var
test(13) = var
...
进入:
我遇到的问题是括号中的值变化。我希望在值之后进行编辑,以避免必须捕获并分配它。我尝试了以下方法,认为我可以使用*
作为括号内的通配符,但似乎无法使其工作
sed -n "s/\(test(.*\)\s+\w+/\1) = newstuff/g" file.txt
您可以使用以下sed命令:
sed -i.bak 's/^\([^=]* *= *\).*$/\1newvar/' file
这将匹配RHS字符串(从开始到找到=
),并替换为newvar
如果要使用shell变量,请使用双引号:
NEWVAR="something"
sed -i.bak "s/^\([^=]* *= *\).*$/\1$NEWVAR/" file
更新:仅更改以测试开始的行:
sed -i.bak "s/^\( *test *[^=]* *= *\).*$/\1$NEWVAR/" file
为什么不直接做s/var/newvar/
?对不起,这是一个MWE,可能有点太简单了。我不能这样做,因为var
正在改变(newvar
存储在一个数组中)。我会在10分钟内标记为正确答案(你对系统来说太快了)。谢谢谢谢你的更新。事实证明,这也起到了作用:sed“s/^test\([^=]***\).$/test\1newvar/“file.txt
,但我认为您的方法更干净。
sed -i.bak "s/^\( *test *[^=]* *= *\).*$/\1$NEWVAR/" file