替换文件中的值的 perl 单行命令很简单:
perl -i 's/oldval/newval/g' file.txt
但是如果我们想要替换特定参数的值(值在“=”分隔符之后),那么 perl 单行语法应该是什么?
例子
我们希望匹配VIPIP字符串并将“=”分隔符后的值替换为其他值192.17.200.100 (使用 perl 单行语法)
more file.txt
VIP_IP=172.17.200.15
if [[ $VIP_IP = $HOST_IP ]]
then
.
.
.
预期成绩
more file.txt
VIP_IP=192.17.200.100
if [[ $VIP_IP = $HOST_IP ]]
then
.
.
.
答案1
更改 IP 地址
perl -p -i -e 's/VIP_IP=[[:digit:].]+/VIP_IP=192.17.200.100/' file.txt
或者:
perl -i -pe 's/(VIP_IP=)[[:digit:].]+/${1}192.17.200.100/' file.txt
或者,如果新 IP 在 shell 变量中:
export ip=192.17.200.100
perl -i -pe 's/(VIP_IP=)[[:digit:].]+/${1}$ENV{ip}/' file.txt
更改名称
假设我们的文件如下所示:
$ cat file.txt
VIP_IP=192.17.200.100
HOST=James
并且,假设我们想更改 HOST 后面的(字母)单词。在这种情况下:
export host=Timothy
perl -pe 's/(HOST=)[[:alpha:]]+/${1}$ENV{host}/' file.txt
如果我们想要改变一个字母数字单词,而不是纯字母单词:
export host=Timothy
perl -pe 's/(HOST=)[[:alnum:]]+/${1}$ENV{host}/' file.txt
如果我们希望限制更少,并更改以下任何和所有字符HOST=
:
export host=Timothy
perl -pe 's/(HOST=).*/${1}$ENV{host}/' file.txt