Причиной было слишком старое ядро! Я использовал сервер OVH с ядром 3.14. Я не понял, что обновление системы не обновляет ядро. Я следовал этимhttp://help.ovh.com/KernelInstallи немного этим инструкциямhttps://bbs.archlinux.org/viewtopic.php?id=214512
Вы можете сопоставить первую строку с простым /^...
регулярным выражением, а затем использовать блок в квадратных скобках для проверки второй строки.
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 =
потому что первое совпадение «израсходует» второе; но я не думаю, что это произойдет, учитывая структуру вашего ввода.