尝试有选择地更改包含许多其他行的文件中的所有行。
输入:
abc
PASSWORD=123
xyz
期望的输出;
abc
PASSWORD *redacted*
xyz
这是我正在使用的perl单线程。我尝试了一些变体,但结果并不理想。
perl -i.bak -pe '{if (/PASSWORD/) {print "PASSWORD *redacted*"}else {print "$_"}}' yme.conf
(注意Solaris上需要-i.bak)。
我从该脚本得到的是:
abc
abc
PASSWORD=*redacted* PASSWORD=123
xyz
xyz
我不是Perl的专家,但我有很多文件要做(* .conf),所以选择Perl作为工具。
答案 0 :(得分:4)
由于-p
表示打印,因此没有理由再次使用print
。以下内容使用替换运算符替换单词PASSWORD
后的所有内容*redacted*
:
perl -i.bak -pe 's/(PASSWORD).*/$1 *redacted*/' yme.conf
答案 1 :(得分:4)
您正在获得额外的输出,因为-p
选项已自动打印$_
。您可以使用-n
来修改原始代码(并将\n
添加到编辑后的字符串中):
perl -i.bak -ne 'if (/PASSWORD/) {print "PASSWORD *redacted*\n"} else {print $_}' yme.conf
使用-p
:
perl -i.bak -pe 'if (/PASSWORD/) {$_ = "PASSWORD *redacted*\n"}' yme.conf
我们循环输入行,当前行存储在$_
中。如果它包含PASSWORD
,我们会覆盖它。 -p
选项会在循环结束时自动输出$_
,然后是原始行或我们的编辑版本。
答案 2 :(得分:-1)
$ variable = ~s / PASSWORD / PASSWORD 编辑 / g;
这将全局更改所需的行。