替换特定参数上的分隔符后面的字符串/行

时间:2015-03-30 08:40:21

标签: linux perl solaris

我有以下Perl单行代码,

我的目标是替换“=”分隔符之后的行,以及 PARAM 变量

中定义的行
more file.txt
PARAM=I WANT TO REPLACE THIS LINE

bash-3.00# export VAL="THIS IS THE NEW LINE FOR EXAMPLE"
bash-3.00# perl -i -pe 's/(PARAM=)+/${*}$ENV{VAL}/' file.txt
bash-3.00# more file.txt
THIS IS THE NEW LINE FOR EXAMPLEI WANT TO REPLACE THIS LINE

但实际上它取代了所有的线路包括PARAM本身

预期结果应为

more file.txt
PARAM= THIS IS THE NEW LINE FOR EXAMPLE

请在我的Perl单线代码中建议需要修复哪些内容?

其他仍然不起作用的例子:

bash-3.00# more file.txt
PARAM=SOME STRING
bash-3.00# export VAL="PUT THAT"
bash-3.00# perl -i -pe 's/PARAM=\K.+/$ENV{VAL}/' file.txt
bash-3.00# more file.txt
PARAM=SOME STRING

1 个答案:

答案 0 :(得分:2)

您可以使用\K(正面观察)和.+删除PARAM=之后的所有内容,直至换行,

perl -i -pe 's/PARAM=\K.+/ $ENV{VAL}/' file.txt

或旧的perl,

perl -i -pe 's/(?<=PARAM=).+/ $ENV{VAL}/' file.txt