在使用sed / awk启动时写入/ etc / networking / interfaces?

新手在这里,

我试图在启动时使用(当前) sed写入自动生成的XEN Ubuntu(12.04 / 10.04 / 8.04)DomU服务器的自动生成的/etc/network/interfaces文件。

自动生成的文件格式如下:

 auto eth0
 iface eth0 inet static
    地址192.168.0.88
    网关192.168.0.254
    networking255.255.255.255
汽车
 iface lo inet loopback

使用sed ,我试图改变第1和第2行,添加第三行,删除网关和最后两行,并在最后添加四个额外的行。

我现在坚持添加第三行,因为脚本每次运行时都会添加这行代码:

 #!/斌/庆典

 sed -i“1s /.*/ auto lo eth0 /”/ tmp / interfaces
 sed -i“2s /.*/ iface lo inet loopback /”/ tmp / interfaces
 sed -i“2a \ iface eth0 inet static”/ tmp / interfaces

是否有可能只添加第三行,如果它不存在使用sed (或awk )?

同样,如何删除网关和只有不存在的最后两行?

我是新来的sed ,所以想知道我是否应该看awk而不是实现这个?

任何帮助将不胜感激。

科林。

编辑:刚才意识到我应该问在StackOverflow这个问题

使用awk会更容易。 比方说你想改变

 auto eth0 iface eth0 inet static address 192.168.0.88 gateway 192.168.0.254 network 255.255.255.255 auto lo iface lo inet loopback 

 auto ServerFault-1 iface ServerFault-1 inet static address 1.2.3.4 gateway 5.6.7.8 network 255.255.255.255 auto lo iface lo inet loopback 

你可以使用下面的awk脚本

 $ awk -f script.awk interfaces auto ServerFault-1 iface ServerFault-1 inet static address 1.2.3.4 gateway 5.6.7.8 network 255.255.255.255 auto lo iface lo inet loopback $ $ cat script.awk { if ($0 ~ /auto eth0/) { print $1,"ServerFault-1" } \ else if ($0 ~ /iface eth0/) { IFACE=$2; $2 ="ServerFault-1"; print $0} \ else if (($0 ~ /address/) && (IFACE ~ /eth0/)) {print $1,"1.2.3.4"} \ else if (($0 ~ /gateway/) && (IFACE ~ /eth0/)) {print $1,"5.6.7.8"} \ else print $0 } $ $ cat interfaces auto eth0 iface eth0 inet static address 192.168.0.88 gateway 192.168.0.254 network 255.255.255.255 auto lo iface lo inet loopback $