sed '/function_1(/,/^[[:space:]]*}/ {
,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
}' YourFile
- fügen Sie die Zeile nach dem
}
ein (allein in der Zeile mit eventuell etwas Leerzeichen davor) aus dem Abschnitt, der mitfunction_1(
beginnt - ich nehme an, es gibt keinen
}
allein in Ihrem internen Code wie in Ihrem Beispiel
Seien Sie vorsichtig bei der Auswahl basierend auf dem Funktionsnamen, da er als Aufruf der Funktion selbst in einem anderen Codeabschnitt verwendet werden könnte (und normalerweise auch verwendet wird), also vielleicht ein /^void function_1()$/
ist besser
Nicht zählen, abgleichen:
sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input
Dies untersucht den Block zwischen der Deklaration und der schließenden geschweiften Klammer und hängt dann TEXT_TO_INSERT nach der schließenden geschweiften Klammer an.
Verwenden Sie awk:
awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
1
ist eine Abkürzung für{print}
, also werden alle Zeilen in der Datei gedruckt- Wenn das Muster übereinstimmt, setzen Sie
c
bis 4 - wenn
c
erreicht 1 (alsoc
ist wahr und!--c
wahr ist), füge die Zeile ein
Sie könnten einfach !--c
verwenden aber Hinzufügen der Prüfung auf c
auch wahr bedeutet, dass c
nimmt nicht über 0 hinaus ab.
Versuchen Sie dies mit GNU sed:
sed "/function_1/{N;N;N;a new_text
}" filename