Назад | Перейти на главную страницу

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

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

Я пытаюсь написать автоматически сгенерированный /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
$