Запись в /etc/network /interfaces при загрузке с использованием sed/awk?

Новичок здесь,

Я пытаюсь написать в автоматически сгенерированный /etc/network/interfaces файл недавно подготовленного сервера DomU XEN Ubuntu (12.04/10.04/8.04) во время загрузки с использованием (в настоящее время) sed,

Автоматически сгенерированный файл имеет следующий формат:

авто eth0
iface eth0 inet static
    адрес 192.168.0.88
    шлюз 192.168.0.254
    сеть 255.255.255.255
авто ло
iface lo inet loopback

С помощью sed Я пытаюсь изменить строки 1 и 2, добавить третью строку, удалить шлюз и две последние строки и добавить четыре дополнительные строки в конце.

В настоящее время я застрял на добавлении третьей строки, так как скрипт добавляет эту строку при каждом запуске:

#! / Bin / Баш

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
$ 
Другие вопросы по тегам