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

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

新手在这里,

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

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

自动 eth0
iface eth0 inet 静态
    地址 192.168.0.88
    网关 192.168.0.254
    网络 255.255.255.255
自动档
iface lo inet 环回

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

我目前停留在添加第三行,因为脚本每次运行时都会添加此行:

/bin/bash #!/bin/bash

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 上问这个问题

答案1

使用 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
$ 

相关内容