Вот решение с использованием sed:
$ sed -n 'H;${x;s/^\n//;s/nameserver .*$/nameserver 127.0.0.1\n&/;p;}' resolv.conf
# Generated by NetworkManager
domain dhcp.example.com
search dhcp.example.com
nameserver 127.0.0.1
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
Как это работает: во-первых, подавьте вывод sed с помощью флага -n
.Затем для каждой строки мы добавляем строку к пробелу, разделяя их новыми строками:
H
Когда мы подходим к концу файла (с адресом $
), мы перемещаем содержимоепространство удержания для пространства образца:
x
Если первая строка в пространстве образца пуста, мы заменяем ее ничем.
s/^\n//
Затем мы заменяем первую строку, начинающуюся с nameserver
строкой, содержащей nameserver 127.0.0.1
, новой строкой (Ваша версия sed
может не поддерживать \n
, в этом случае замените n
буквальным переводом строки) и исходную строку (представленную &
):
s/nameserver .*$/nameserver 127.0.0.1\n&/
Теперь нам просто нужно распечатать результаты:
p