Добавить строку после определенной строки в одной строке в текстовом файле

Я пытаюсь добавить строку в ту же строку в текстовом файле. Я использовал следующий метод.

sed -i "s/\bmembers\b/& \t$host,/" printer.cfg 

Он добавит строку после строки членов, а также добавит вкладку, чтобы сделать ее правильной.

Я получу такой результат,

 define hostgroup{ hostgroup_name HOSTGROUP ONE alias Host Group 1 Printers members foo0, foo1, bar2, foo2, bar3 } 

Где foo0 – моя добавленная строка, использующая выше sed.

Но проблема в том, что есть один текстовый файл, содержащий много строк «членов».

например

 define hostgroup{ hostgroup_name HOSTGROUP ONE alias Host Group 1 Printers members foo1, bar2, foo2, bar3 } define hostgroup{ hostgroup_name HOSTGROUP TWO alias 2nd Host Group members example1, example3, example2 } 

В этом выше примере я хочу добавить строку ТОЛЬКО в первом пара (hostgroup_name HOSTGROUP ONE). В этом случае, как я могу ссылаться на hostgroup_name и добавлять текст после строки «members» с одной вкладкой?

2 Solutions collect form web for “Добавить строку после определенной строки в одной строке в текстовом файле”

Два подхода:

sed подход:

 sed "0,/members/{s/\bmembers */&$host, /}" printer.cfg 
  • 0,/members/ – диапазон адресов, занимающий ряд строк, начиная с 1-й строки до первого появления шаблона members

awk- подход:

 awk -vh=$host '!f && /members /{ $2=sprintf("%8s, %s",h,$2); f=1 }1' printer.cfg 

Выход (для обоих подходов):

 define hostgroup{ hostgroup_name HOSTGROUP ONE alias Host Group 1 Printers members foo0, foo1, bar2, foo2, bar3 } define hostgroup{ hostgroup_name HOSTGROUP TWO alias 2nd Host Group members example1, example3, example2 } 

Следуйте трехэтапному процессу выбора, хранения и формирования диапазона интересующих данных. Последняя задача печати в stdout – автозагрузка sed .

 host='Foo_0'; sed -Ee ' # Step-1: SELECT RANGE /^define hostgroup[{]/,/^[}]/!b # Step-2: SAVE RANGE DATA H; /^define hostgroup[{]/h; /^[}]/!d # Step-3: SHAPE RANGE DATA g;/\nhostgroup_name\s+HOSTGROUP ONE/s/\nmembers\s+/&'"${host}"', / ' printer.cfg 
  • сохранить дубликаты из $ PATH на источнике
  • Как удалить все, кроме последнего вхождения строки?
  • Сортировка файлов css по свойству цвета
  • Получите очень следующее слово подстроки в строке
  • Сопоставьте несколько регулярных выражений из одного файла с помощью awk
  • Как разбить цикл bash на выход внутреннего скрипта?
  • Как сравнить две даты в скрипте для проверки истечения срока действия
  • Использование переменной даты с помощью wget -post-data
  • Shell, howto извлекает буквы из строки $ line1 = «Проверьте это ... проверьте это!» И напечатайте по одному
  • Был ли «\ 0» в конце каждого скрипта?
  • Создать таблицу с частотой уникальных имен, полученных из нескольких CSV-файлов
  • перенаправить вывод команды в переменную (скрипт bash)
  • Linux и Unix - лучшая ОС в мире.