从匹配的模式中添加文本,如果模式不存在则添加

问题描述 投票:1回答:1

我希望有人可以对此提供帮助。我敢肯定,这个问题已经问过了,但是我在理解某些答案时遇到了一些困难。

我在file.txt中包含以下文本

value1 = 192.168.1.2

value2 = 10.1.1.15

我想使用sed替换那些IP地址并添加value3 = 10.224.100.5,如果value3不存在。

我到目前为止或至少尝试过的。

sed \ 
 -e '/^#\?\(\s*value1\s*=\s*\).*/{s//\newvalue/;:a;n;ba;q}' \
 -e '$avalue1=newvalue' \
 -e '/^#\?\(\s*value2\s*=\s*\).*/{s//\newvalue/;:a;n;ba;q}' \
 -e '$avalue2=newvalue' \
 -e '/^#\?\(\s*value3\s*=\s*\).*/{s//\newvalue/;:a;n;ba;q}' \
 -e '$avalue3=newvalue' file.txt

如果value(1,2,3)不存在,则工作正常,但是如果file.txt中存在value1,则它停在1。

我之所以假设它是因为; q

有什么建议吗?我真的很难收到这个。

sed
1个回答
0
投票

使用awk的一种方法:

awk -v v1="new1" -v v2="new2" 
   'BEGIN{FS=OFS="=";v3=1}
   $1=="value1"{$2=v1}
   $1=="value2"{$2=v2}
   $1=="value3"{v3=0}7;
   END{if(v3)print "value3=newV3"}' file

以您的示例进行测试:

kent$  cat f
value1=192.168.1.2
value2=10.1.1.15

kent$  awk -v v1="new1" -v v2="new2" 'BEGIN{FS=OFS="=";v3=1}$1=="value1"{$2=v1}$1=="value2"{$2=v2}$1=="value3"{v3=0}7;END{if(v3)print "value3=newV3"}' f
value1=new1
value2=new2
value3=newV3
© www.soinside.com 2019 - 2024. All rights reserved.