我想替换一行中的子字符串,但我不知道该子字符串是什么。但我知道该行的开头。例如,DNS1=[...to be replaced....]。
我试过:
sed -i 's/DNS1=*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0
结果是:
之前:DNS1 =“10.10.2.2”
之后:DNS1="8.8.8.8""10.10.2.2"
我究竟做错了什么...
答案1
尝试:
sed -i 's/DNS1=.*/DNS1="8.8.8.8"/' /etc/sysconfig/network-scripts/ifcfg-eth0
该*
运算符表示“匹配前面的字符 0 次或更多次”。在您的示例中,前面的字符是=
,因此它将匹配DNS1=
,仅此而已,因为没有其他连续的=
字符,并将该部分替换为DNS1="8.8.8.8"
,这将生成字符串DNS1="8.8.8.8""10.10.2.2"
,就像您所说的那样。
运算.
符在上下文中的意思是“任何字符” sed
,这可能就是您在此处想要的。该变体将匹配DNS1=
,然后“任何字符 0 次或更多次”,直到行尾,然后将其替换为DNS1="8.8.8.8"
。