sed从匹配模式添加文本,如果模式不匹配则添加';不存在

sed从匹配模式添加文本,如果模式不匹配则添加';不存在,sed,Sed,我希望有人能帮上忙。我很肯定有人问过这个问题,但是,我在理解一些答案时遇到了一些困难 我在file.txt中有以下文本 value1=192.168.1.2 value2=10.1.1.15 如果value3不存在,我想用sed替换这些ip地址并添加value3=10.224.100.5 我迄今为止或至少尝试过的 sed \ -e '/^#\?\(\s*value1\s*=\s*\).*/{s//\newvalue/;:a;n;ba;q}' \ -e '$avalue1=newvalu

我希望有人能帮上忙。我很肯定有人问过这个问题,但是,我在理解一些答案时遇到了一些困难

我在file.txt中有以下文本

value1=192.168.1.2

value2=10.1.1.15
如果value3不存在,我想用sed替换这些ip地址并添加value3=10.224.100.5

我迄今为止或至少尝试过的

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
如果值(1,2,3)不存在,这可以正常工作。但是,如果file.txt中存在值1,它将停止在1

我认为这是因为;q

有什么建议吗?我真的很难做到这一点。

awk的一种方法:

awk -v v1="new1" -v v2="new2" 
   'BEGIN{FS=OFS="=";addV3=1}
   $1=="value1"{$2=v1}
   $1=="value2"{$2=v2}
   $1=="value3"{addV3=0}7;
   END{if(addV3)print "value3=newV3"}' file
用您的示例进行测试: awk单程:

awk -v v1="new1" -v v2="new2" 
   'BEGIN{FS=OFS="=";addV3=1}
   $1=="value1"{$2=v1}
   $1=="value2"{$2=v2}
   $1=="value3"{addV3=0}7;
   END{if(addV3)print "value3=newV3"}' file
用您的示例进行测试:
如果可以接受的话,awk会更容易。我愿意在这个阶段接受任何想法。如果可以接受的话,我的答案发布工作会更容易。我愿意在这个阶段接受任何想法,我的答案发布