GNU/Linux >> Tutoriels Linux >  >> Linux

sed - insérer une ligne après X lignes après la correspondance

sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • insérer la ligne après le } (seul dans la ligne avec éventuellement un espace avant) de la section commençant par function_1(
  • je suppose qu'il n'y a pas de } seul dans votre code interne comme dans votre sample

soyez prudent lors de la sélection basée sur le nom de la fonction car elle pourrait être utilisée (et c'est normalement le cas) comme un appel à la fonction elle-même dans une autre section de code, donc peut-être un /^void function_1()$/ c'est mieux


Ne comptez pas, faites correspondre :

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

Cela examine le bloc entre la déclaration et l'accolade fermante, puis ajoute TEXT_TO_INSERT après l'accolade fermante.


Utilisez awk :

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1 est un raccourci pour {print} , donc toutes les lignes du fichier sont imprimées
  • lorsque le modèle correspond, définissez c à 4
  • quand c atteint 1 (donc c est vrai et !--c est vrai), insérez la ligne

Vous pouvez simplement utiliser !--c mais en ajoutant le chèque pour c être vrai signifie également que c ne diminue pas au-delà de 0.


Essayez ceci avec GNU sed :

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

Linux
  1. Imprimer la ligne précédente après une correspondance de modèle à l'aide de Sed ?

  2. Insérer de nouvelles lignes avec des valeurs manquantes (na) ?

  3. Sed :Insérer le texte après le nième caractère précédant/suivant une chaîne donnée ?

  4. Afficher toutes les lignes avant un match ?

  5. Comment utiliser sed pour supprimer uniquement les doubles lignes vides ?

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Suppression de lignes spécifiques d'un fichier dans la ligne de commande Linux

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

sed à insérer lors de la première correspondance uniquement

grep ne correspond qu'aux lignes d'une plage spécifiée

sed insérer une ligne avec des espaces sur une ligne spécifique