如何匹配参数并替换“=”分隔符后的值

如何匹配参数并替换“=”分隔符后的值

替换文件中的值的 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

相关内容