как отредактировать следующую строку после сопоставления шаблона и добавить строку, если она не существует

Я ищу изменение содержимого файла, которое повторяется дважды с этой заменой. Я хочу добавить дополнительную строку ко второму содержимому в том же файле

Пример файла

User YOURNAME IdentityFile ~/.ssh/YOURKEY . . . User YOURNAME Installing Installing 

Пример Результат после запуска скрипта

 User adminuser IdentityFile ~/.ssh/id_rsa . . . User adminuser IdentityFile ~/.ssh/id_rsa Installing Installing 

Я могу изменить user и YOURKEY с помощью команды ниже sed

 `sed- is/"YOURNAME/adminuser"/g /root/.ssh/config` `sed -i 's/YOURKEY/id_rsa/g' ff1` 

Но я не могу вставить IdentityFile ~/.ssh/id_rsa в следующую строку.

отредактированный

Дополнительная информация ****User adminuser имеет место в начале строки. Эти файлы синхронизируются на ежедневных базах, поэтому не удаляйте строку IdentityFile . После синхронизации он будет заменен

Окончательное редактирование, которое работает по мере необходимости

 perl -i -ne 'next if /IdentityFile/; s#YOURNAME#adminuser\n IdentityFile ~/.ssh/id_rsa#; print' filename 

2 Solutions collect form web for “как отредактировать следующую строку после сопоставления шаблона и добавить строку, если она не существует”

Просто удалите все случаи IdentityFile а затем добавьте их снова явно:

 $ perl -i -ne 'next if /IdentityFile/; s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#; print' file $ cat file User adminuser IdentityFile ~/.ssh/id_rsa . . . User adminuser IdentityFile ~/.ssh/id_rsa Installing Installing 

next if /IdentityFile/ пропускает любые строки, соответствующие IdentityFile . s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa# заменит любой экземпляр YOURNAME на adminuser , новую строку и строку IdentityFile . Окончательная print печатает все строки.

Отчасти проблема заключается в том, что ваш шаблон несовместим: первое вхождение имеет строку IdentityFile , а вторая – нет . Вы можете сделать это согласованным, сначала удалив существующие строки IdentityFile , а затем добавив нужные строки.

Чтобы удалить строки:

 sed -i '/^IdentityFile /d' filename 

Чтобы добавить строки, вы можете сделать это в sed , сопоставляя строку User и добавляя строку, например,

 sed -e '/^User /'a'\ IdentityFile ~/.ssh/id_rsa' filename 
  • дождитесь выхода хрома, прежде чем продолжить сценарий оболочки
  • Как запросить ввод от пользователя из переменной или массива bash?
  • Практическое руководство. Скрипты Autorun после входа пользователя в систему
  • вызов $ PWD из другого скрипта
  • Возьмите grep значение и выведите количество и значение вместе
  • Как использовать верхушку в сценарии оболочки для отслеживания потребления памяти процессом?
  • grep до соответствия скобкам
  • разрешение bash отклонено, но sh works
  • разрешение отклонено при запуске скрипта, несмотря на + x
  • Сценарий для отправки оповещения по электронной почте только при изменении процесса
  • Пример использования / практический пример для встроенного exec Bash
  • Linux и Unix - лучшая ОС в мире.