我有以下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
答案 0 :(得分:2)
您可以使用\K
(正面观察)和.+
删除PARAM=
之后的所有内容,直至换行,
perl -i -pe 's/PARAM=\K.+/ $ENV{VAL}/' file.txt
或旧的perl,
perl -i -pe 's/(?<=PARAM=).+/ $ENV{VAL}/' file.txt