Итак, вот что я сделал, чтобы решить эту проблему:
Мне повезло, что у меня было несколько хостов с установленным icinga2 (для проверок на основе агентов ).
Я скопировал /lib/systemd/system/icinga2.service
и недостающий /etc/default/icinga2
через scp
с рабочей машины на свой хост.
с этого момента я получил ошибки icinga2, потому что там все еще отсутствуют файлы конфигурации. Я скопировал их на свою машину, и все снова заработало... теперь я могу сосредоточиться на своей первоначальной проблеме... gdb...:)
Спасибо за ответы
Как насчет использования цикла?
sed '/^#nvram = \[/{
:a
N
/\n#\]/!ba
a\
foobar
}
' sample.txt
Пояснение:
:a # begin loop
N # append next line to pattern space
/\n#\]/!ba # if we haven't matched the end marker yet, branch back to a
a\ # append after loop exits
foobar
По крайней мере, в GNU sed это можно записать в один -лайнер
sed -e '/^#nvram = \[/{:a; N; /\n#\]/!ba; a\foobar' -e '}' sample.txt
С GNU sed для-z
:
$ sed -z 's/#nvram = \[.*\]/&\nfoobar\n/' file
lots of text
lots of text
#nvram = [
# these
# could
# be,
# anything
#]
foobar
lots of text
lots of text
Возможно, вам потребуется настроить регулярное выражение в зависимости от того, что вы на самом деле подразумеваете под «что угодно» (, например. может ли он содержать]
)и есть ли в вашем файле другие подобные блоки.
Это было бы более надежным, например, если anything
не включает ]
и у вас есть другие подобные блоки во входных данных:
sed -z 's/#nvram = \[[^]]*\]/&\nfoobar\n/' file
Я выберу один из ваших подходов и покажу, как заставить его работать, чтобы он находил отклик и оставался с вами:
$ sed -e '
/^#nvram = \[$/,/^#]$/!b
/^#]$/a\
Foobar
' sample.txt
Мне лично не нравится вышесказанное и делаю несколько иначе:
$ sed -e '
/^#nvram = \[$/,/^#]$/!b
/^#]$/G
s/\n/&Foobar/
' sample.txt
Вот еще простой sed:
sed '/#nvram = \[/,/#]/ s/#]/#]\nfoobar/' file
Он находит строку, в которой встречается #nvram = [
, а затем все строки после нее и до тех пор, пока не будет адресовано первое вхождение #]
, затем вы заменяете #]\nfoobar
на #]
.