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