如何用 sed 替换行的未知子字符串

如何用 sed 替换行的未知子字符串

我想替换一行中的子字符串,但我不知道该子字符串是什么。但我知道该行的开头。例如,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"

相关内容