我希望有人可以对此提供帮助。我敢肯定,这个问题已经问过了,但是我在理解某些答案时遇到了一些困难。
我在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
有什么建议吗?我真的很难收到这个。
使用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