Escrevendo para / etc / networking / interfaces na inicialização usando sed / awk?

1

Novato aqui,

Estou tentando gravar em um arquivo /etc/network/interfaces gerado automaticamente de um servidor DomU XEN Ubuntu (12.04 / 10.04 / 8.04) recém-provisionado no momento da inicialização usando (atualmente) sed .

O arquivo gerado automaticamente é formatado da seguinte forma:

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

Usando sed , estou tentando alterar as linhas 1 e amp; 2, adicione uma terceira linha, remova o gateway e as duas últimas linhas e adicione quatro linhas extras no final.

Atualmente, estou preso ao adicionar a terceira linha, pois o script adiciona essa linha toda vez que é executada:

#!/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

É possível adicionar a terceira linha apenas se ela não existir usando sed (ou awk )?

Da mesma forma, como posso excluir o gateway e as duas últimas linhas apenas se elas não existirem?

Sou novo em sed , por isso estou querendo saber se devo olhar para awk para conseguir isso?

Qualquer ajuda seria muito apreciada.

Colin.

EDIT: Apenas percebi que deveria realmente fazer essa pergunta no StackOverflow

    
por Colin 09.10.2012 / 12:56

1 resposta

0

Isso será mais fácil usando o awk. Vamos dizer que você quer mudar

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

para

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

Você pode usar o seguinte script 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
$ 
    
por 09.10.2012 / 13:32