问题描述
我的配置文件中有这一行
I have this line in my configuration file
MY_PASSWORD=PASSWORD
我想通过perl单行代码将 PASSWORD 一词更改为- MY_SECRET_PASS
I want to change by perl one-liner line , the word PASSWORD to other word as - MY_SECRET_PASS
所以我写了这个perl衬里语法(这个perl在我的bash脚本中)
so I write this perl liner syntax ( this perl is inside my bash script )
perl -i -pe "s/PASSWORD/MY_SECRET_PASS/" file
我还想在我的perl单行语法中添加条件,该条件将检查 PASSWORD 在 MY_PASSWORD =
I want also to add condition to my perl one-liner syntax that will check if PASSWORDdefined after MY_PASSWORD=
因此只有当它成功时,perl才会将 PASSWORD 替换为 MY_SECRET_PASS
so only if it ture , then perl will replace the PASSWORD , with MY_SECRET_PASS
如果不是perl,它将不执行任何操作而退出
if not perl will exit without do anything
示例:
more file
MY_PASSWORD=PASSWORD
运行perl行文件后应如下所示:
after running the perl line file should be like this:
MY_PASSWORD=MY_SECRET_PASS
但是正如我说的那样,perl行必须首先检查MY_PASSWORD =之后的PASSWORD单词是否存在,
but as I said perl line must to check first the existing of the word PASSWORD after MY_PASSWORD= ,
推荐答案
它将与 MY_PASSWORD = PASSWORD
匹配,但仅替换 PASSWORD
部分,
It will match MY_PASSWORD=PASSWORD
, but replace only PASSWORD
part,
perl -i -pe 's/MY_PASSWORD=\K PASSWORD/MY_SECRET_PASS/x' file
\ K
是零宽度的正向查看,并且/x
告诉正则表达式忽略空格,这可以提高正则表达式的可读性.
\K
is a zero-width positive look behind, and /x
tells regex to ignore white-spaces which may improve regex readability.
更新:
用于非常旧的perl版本( 5.8.x
和更早版本)
for very old versions of perl (5.8.x
and older)
perl -i -pe 's/(?<=MY_PASSWORD=)PASSWORD/MY_SECRET_PASS/' file
这篇关于perl一线+在编辑文件之前添加条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!