Новичок здесь,
Я пытаюсь написать автоматически сгенерированный /etc/network/interfaces
файл недавно подготовленного сервера DomU XEN Ubuntu (12.04 / 10.04 / 8.04) во время загрузки с использованием (в настоящее время) sed
.
Автоматически созданный файл имеет следующий формат:
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
С помощью sed
, Я пытаюсь изменить строки 1 и 2, добавить третью строку, удалить шлюз и последние две строки и добавить четыре дополнительных строки в конце.
В настоящее время я застрял на добавлении третьей строки, поскольку скрипт добавляет эту строку каждый раз при запуске:
#!/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
Это будет проще с использованием 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
$