Добавить строки, используя sed, соответствующие двум строкам

Причиной было слишком старое ядро! Я использовал сервер OVH с ядром 3.14. Я не понял, что обновление системы не обновляет ядро. Я следовал этимhttp://help.ovh.com/KernelInstallи немного этим инструкциямhttps://bbs.archlinux.org/viewtopic.php?id=214512

2
06.11.2019, 14:44
1 ответ

Вы можете сопоставить первую строку с простым /^...регулярным выражением, а затем использовать блок в квадратных скобках для проверки второй строки.

sed '/^SID_LIST_LISTENER =$/{ N ; /\n\s*(SID_LIST =$/ a _line(s) to append _
    ; }'

Nсчитывает следующую строку ввода, добавляя ее к уже имеющейся, и /\n...соответствует только при соединении. При всех совпадениях, отличных от -, ввод по-прежнему будет печататься без изменений.

При попытке добавить строки с a\, вероятно, проще поместить все это в файл сценария:

/^SID_LIST_LISTENER =$/{ N ;
  /\n\s*(SID_LIST =$/ a\
    (SID_DESC =\
      (GLOBAL_DBNAME = DB11G)\
      (ORACLE_HOME = /ofa/u1002/18C_DB_HOME)\
      (SID_NAME = DB11G1)\
    )
  ; }

и вызовите его с помощью

sed -f addlines.sed

Также имейте в виду, что эта процедура не будет работать, если ваш ввод содержит две последовательные «первые строки», т.е.

SID_LIST_LISTENER =
SID_LIST_LISTENER =
  (SID_LIST =

потому что первое совпадение «израсходует» второе; но я не думаю, что это произойдет, учитывая структуру вашего ввода.

0
27.01.2020, 22:24

Теги

Похожие вопросы