GNU/Linux >> Linux Esercitazione >  >> Linux

sed - inserisce riga dopo X righe dopo la corrispondenza

sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • inserisci la riga dopo il } (solo nella riga con eventualmente uno spazio prima) dalla sezione che inizia con function_1(
  • Presumo che non ci sia } solo nel tuo codice interno come nel tuo campione

fai attenzione alla selezione in base al nome della funzione perché potrebbe essere usato (e normalmente lo è) come chiamata alla funzione stessa in un'altra sezione di codice quindi forse un /^void function_1()$/ è meglio


Non contare, abbina:

sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input

Questo esamina il blocco tra la dichiarazione e la parentesi graffa di chiusura, quindi aggiunge TEXT_TO_INSERT dopo la parentesi graffa di chiusura.


Usa awk:

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1 è una scorciatoia per {print} , quindi vengono stampate tutte le righe del file
  • quando il modello è abbinato, imposta c a 4
  • quando c raggiunge 1 (quindi c è vero e !--c è vero), inserire la riga

Potresti semplicemente usare !--c ma aggiungendo il segno di spunta per c essere vero significa anche che c non continua a diminuire oltre 0.


Prova questo con GNU sed:

sed "/function_1/{N;N;N;a new_text
}" filename

Linux
  1. Come inserire del testo prima della prima riga di un file?

  2. Schema di sostituzione dopo l'ennesima corrispondenza trovata su ogni riga??

  3. Sostituire Intervallo di linee con Intervallo di linee (sed o altro)?

  4. Sed On Osx inserisce a una certa linea?

  5. Mostra tutte le righe prima di una partita?

Come rimuovere le righe da un file usando il comando Sed

Sed:inserire testo dopo l'ennesimo carattere che precede/segue una determinata stringa?

Come contare il numero di righe in un file dopo una corrispondenza Grep?

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Come usare sed per rimuovere solo le doppie righe vuote?

Come ottenere l'ennesima riga dopo una presa?