新手在这里,
/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
$