我正在尝试将特定ethX设备的“dns-nameservers x.x.x.x”行添加到/ etc / network / interfaces(这可以更改,它可能是另一个文件的另一行 . )
即将dns-nameservers添加到em1我想使用类似的东西:
sed -i '/^auto em1/,/^auto/ .....' /etc/network/interfaces
目前:
auto lo
iface lo inet loopback
auto em1
iface em1 inet static
address 192.168.2.98
netmask 255.255.255.0
gateway 192.168.2.1
auto eth1
iface eth1 inet static
address 192.168.3.155
netmask 255.255.255.0
dns-nameservers 8.8.8.8
我想要的是:
auto lo
iface lo inet loopback
auto em1
iface em1 inet static
address 192.168.2.98
netmask 255.255.255.0
gateway 192.168.2.1
dns-nameservers x.x.x.x (<- this line inserted)
auto eth1
iface eth1 inet static
address 192.168.3.155
netmask 255.255.255.0
dns-nameservers 8.8.8.8
提前致谢 .
4 回答
awk
来救援!使用示例澄清注释:匹配将在文件之间继续(如果找到多对开始/结束模式,则循环) . 例如
第一个输入文件没有结束模式(即6),但搜索在第二个文件上继续 .
如果这不是缩进行为,请澄清问题 .
修改的测试数据:
测试一下:
单行版:
这可能适合你(GNU sed):
在此后遇到
auto em1
打印行并在下一行开始auto
之前插入所需的字符串 .满足您当前和未来需求的解决方案是将与给定设备关联的每组线路保存为单个记录,然后从函数中打印出来,例如:
虽然看起来它只是按原样打印输入文件,但看看它是多么容易,然后调整函数让它在第二个设备的末尾添加一行:
或者只打印设备“em1”的记录:
或匹配特定的网关IP地址,或仅匹配环回或您可能想要选择或操作的任何其他内容或您要打印的特定行或基于每个设备的任何其他内容 .