Wenn Sie GNU awk
in Ihrem System haben, können Sie das folgende Skript verwenden. Die Zeichenfolge wird direkt vor dem Beginn des nächsten Abschnitts angehängt.
awk -v RS='\\[[^]]*\\]' '; printf RT; oRT=RT}' input_file
RS
ist der Datensatztrenner. Es ist ein Regex, der auf irgendetwas zwischen eckigen Klammern gesetzt ist, so dass er mit [Unit]
und übereinstimmt [Service]
. Wenn Sie ein solches RS
Element haben, können Sie einen Datensatz mit dem vollen Inhalt eines Blockabschnitts erstellen.
RT
ist der Datensatzabschluss. Es wird dynamisch awk
für jeden Datensatz basierend auf festgelegt RS
. Es wird nacheinander [Unit]
und halten [Service]
.
Der Trick besteht darin, den Datensatzabschluss in der Variablen zu speichern oRT
. Wenn dieser das Wort Unit
hat, hängen Sie die gewünschte Zeichenfolge an ---MY LINE---
.
Wenn Sie die Zeichenfolge vor der leeren Zeile am Ende des Abschnitts anhängen möchten, verwenden Sie das folgende Skript:
awk -v RS='\\[[^]]*\\]' 'oRT~/Unit/' input_file
Die sub
Funktion ersetzt die leere Zeile am Ende des Datensatzes durch Anhängen der gewünschten Zeichenfolge und einer leeren Zeile.