Запись в /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
$