Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 替换字符串的结尾_Regex_Bash_Sed - Fatal编程技术网

Regex 替换字符串的结尾

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

我尝试了几十种不同的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/^\([^=]* *= *\).*$/\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