GNU/Linux >> LINUX-Kenntnisse >  >> Linux

sed - Zeile nach X Zeilen nach Übereinstimmung einfügen

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 mit function_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 (also c 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

Linux
  1. Muster ersetzen, nachdem N-te Übereinstimmung in jeder Zeile gefunden wurde??

  2. Zeilenbereich durch Zeilenbereich ersetzen (sed oder andere)?

  3. Sed:Text nach dem N-ten Zeichen vor/nach einer gegebenen Zeichenfolge einfügen?

  4. Sed On Osx Insert an einer bestimmten Zeile?

  5. Wie zähle ich die Anzahl der Zeilen in einer Datei nach einem Grep-Match?

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

Wie fügt man Text vor der ersten Zeile einer Datei ein?

Vorherige Zeile nach einer Musterübereinstimmung mit Sed drucken?

Neue Zeilen mit fehlenden Werten einfügen (na)?

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

Wie bekomme ich die n-te Zeile nach einer gruppierten?