добавить строку после совпадения с образцом в Solaris sed

У меня есть файл, который содержит ниже

hosts:      files
ipnodes:    files
networks:   files
protocols:  files
rpc:        files
ethers:     files
netmasks:   files

Мне нужно добавить «dns» в конце только этих двух строк

hosts:      files dns
ipnodes:    files dns

Серверы Solaris с очень ограниченными параметрами в sed sed -i недоступны в поисках обходного пути


person judi    schedule 01.03.2017    source источник
comment
Я отредактировал вопрос, имея больше строк в файле, нужно добавить строку рядом с сопоставлением с образцом, sed на серверах Solaris, -i недоступен   -  person judi    schedule 01.03.2017
comment
Параметр -i в GNU sed примерно эквивалентен сохранению вывода sed во временном файле, а затем копированию или перемещению временного файла обратно поверх оригинала. Основное отличие состоит в том, что sed копирует файлы автоматически.   -  person Jonathan Leffler    schedule 02.03.2017


Ответы (2)


sed без каких-либо причудливых настроек или обновлений на месте будет работать:

sed 's/.*/& dns/' file

Если вам нужно внести это редактирование ТОЛЬКО в строки, начинающиеся со строк, начинающихся с hosts и ipnodes, добавьте фильтр к команде:

sed -e '/^hosts/ s/.*/& dns/' -e  '/^ipnodes/ s/.*/& dns/' file

Примечание. Я предполагаю, что вы перенаправите вывод в новый файл и замените его старым.

person gregory    schedule 01.03.2017
comment
Я отредактировал вопрос, имея больше строк в файле, нужно добавить строку рядом с сопоставлением с образцом, sed на серверах Solaris, -i недоступен - person judi; 01.03.2017
comment
@judi Я обновил свой ответ. И да, я понимаю, что параметры GNU недоступны в Solaris по умолчанию. - person gregory; 01.03.2017
comment
спасибо большое ----- › sed -e '/^hosts/ s/.*/& dns/' -e '/^ipnodes/ s/.*/& dns/' file< /б> - person judi; 01.03.2017

Я удивлен, насколько минимален Solaris sed. Я бы посоветовал использовать awk в этом случае, но это также кажется неправильным. Я рекомендую вообще не запускать сценарий оболочки в Solaris. Прекратите использовать Solaris и замените его подходящей ОС, если вы хотите работать со сценариями оболочки. В противном случае используйте язык программирования, такой как Python, для сценариев.


Предыдущий ответ:

Команда должна выглядеть так:

sed 's/^\(hosts\|ipnodes\).*/& dns/' file

В Solaris sed аргумент -i является обязательным (в отличие от GNU sed).

sed -i '.backup' 's/^\(hosts\|ipnodes\).*/& dns/' file

Это создаст файл file.backup. Проверьте man sed!

person hek2mgl    schedule 01.03.2017
comment
на солярисе -i нет. И расширенные регулярные выражения тоже не работают. См.: docs.oracle.com/cd/ E23823_01/html/816-5165/sed-1.html#scrolltoc - person gregory; 01.03.2017
comment
Да, \| — это расширение GNU для BRE. - person Benjamin W.; 01.03.2017
comment
Вау!, я ожидал того же, что и на BSD. Трудно поверить, что Oracle предлагает такую ​​плохую версию sed. - person hek2mgl; 02.03.2017