Если в вашей системе есть GNU awk
, вы можете использовать следующий скрипт. Добавляет строку прямо перед началом следующего раздела.
awk -v RS='\\[[^]]*\\]' '{printf $0; if(oRT~/Unit/){print "---MY LINE---"}; printf RT; oRT=RT}' input_file
RS
является разделителем записей. Это регулярное выражение, установленное на что-либо между квадратными скобками, так что оно соответствует как [Unit]
и [Service]
. Наличие такой RS
позволяет иметь запись с полным содержанием блока раздела.
RT
- это терминатор записи. Он устанавливается динамически awk
для каждой записи на основе RS
. Он будет удерживать последовательно [Unit]
и [Service]
.
Хитрость заключается в том, чтобы сохранить терминатор записи в переменной oRT
. Если у этого слова есть слово Unit
тогда добавьте искомую строку ---MY LINE---
.
Если вы хотите добавить строку перед пустой строкой в конце раздела, используйте следующий скрипт:
awk -v RS='\\[[^]]*\\]' 'oRT~/Unit/{sub(/\n$/,"---MY LINE---\n\n")}{printf $0 RT; oRT=RT}' input_file
Функция sub
заменяет пустую строку в конце записи добавлением искомой строки и пустой строки.