Via un script, insérer une ligne dans un fichier, juste après une ligne correspo ndant à une regex donnée

Le
Francois Lafont
Bonjour,

J'ai un fichier texte que je souhaite éditer via un script. Précisément,
juste après chaque ligne qui correspond à une regex donnée, je souhaite
ajouter/insérer une ligne parfaitement connue et « constante ».

Par exemple si la regex en question est /toto/ et si la ligne à insérer
est « La ligne à insérer !!! », alors un fichier comme celui-ci :

blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla
blabla blabla toto blabla blabla blabla
blabla blabla blabla blabla blabla blabla
blabla blabla blabla toto blabla blabla
blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla

deviendrait après le traitement du script :

blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla
blabla blabla toto blabla blabla blabla
La ligne à insérer !!!
blabla blabla blabla blabla blabla blabla
blabla blabla blabla toto blabla blabla
La ligne à insérer !!!
blabla blabla blabla blabla blabla blabla
blabla blabla blabla blabla blabla blabla

Je connais *un peu* sed et ça ne me semble pas le bon outil pour faire
ça. En fait, je suppute que le bon outil pour faire ça c'est awk, mais
hélas je ne connais pour l'instant pour ainsi dire pas du tout cet outil.

Merci d'avance pour votre aide.

--
François Lafont
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Arnaud Gomes-do-Vale
Le #24443221
Francois Lafont
Je connais *un peu* sed et ça ne me semble pas le bon outil pour faire
ça. En fait, je suppute que le bon outil pour faire ça c'est awk, mais
hélas je ne connais pour l'instant pour ainsi dire pas du tout cet outil.



awk '{ print } /toto/ { print "La ligne a inserer" }' ton-fichier

Ou en perl :

perl -ne 'print $_; print "La ligne a inserern" if /toto/;' ton-fichier

Ça doit aussi pouvoir se faire avec sed mais je maîtrise moins.

--
Arnaud
http://blogs.glou.org/arnaud/
Francois Lafont
Le #24443451
Le 01/05/2012 13:17, Arnaud Gomes-do-Vale a écrit :

Je connais *un peu* sed et ça ne me semble pas le bon outil pour faire
ça. En fait, je suppute que le bon outil pour faire ça c'est awk, mais
hélas je ne connais pour l'instant pour ainsi dire pas du tout cet outil.



awk '{ print } /toto/ { print "La ligne a inserer" }' ton-fichier



Ah... je me doutais qu'en plus ça serait super court. Pour être sûr de
bien comprendre, le code awk fait deux lignes en quelques sortes ici,
c'est ça ? Comme ça donc :

{ print }
/toto/ { print "La ligne a inserer" }'

C'est-à-dire :
- ligne 1 : quel que soit le motif, on affiche la ligne
- ligne 2 : et si il y a correspondance de la ligne avec le motif /toto/
alors en plus on affiche la ligne à insérer.

Ou en perl : [...]



Perso, le Perl, ça ma toujours fait très peur. :-)

Merci beaucoup pour ton aide Arnaud.


--
François Lafont
moi-meme
Le #24444811
Le Tue, 01 May 2012 14:02:17 +0200, Francois Lafont a écrit :

C'est-à-dire :
- ligne 1 : quel que soit le motif, on affiche la ligne - ligne 2 : et
si il y a correspondance de la ligne avec le motif /toto/ alors en plus
on affiche la ligne à insérer.



si tu maîtrises la "VO", un excellent manuel en PDF :
www.cs.unibo.it/~renzo/doc/awk/nawkA4.pdf

En tout cas je le trouve très bien fait pour apprendre et après pour
trouver un point précis.
Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)
Le #24446081
Le 01/05/2012 13:05, Francois Lafont a écrit :
Bonjour,


Bonjour François,


Je connais *un peu* sed et ça ne me semble pas le bon outil pour faire
ça.


Avec sed, j'ai trouvé cette commande :
sed -i "/toto/a La ligne à insérer !!!" texte.txt

Cordialement,

--
Michel Suquet
Francois Lafont
Le #24447001
Bonjour Michel,

Le 02/05/2012 10:42, "Michel Suquet (Collège Jean-Monnet 91640
Briis-sous-Forges)" a écrit :

Je connais *un peu* sed et ça ne me semble pas le bon outil pour faire
ça.


Avec sed, j'ai trouvé cette commande :
sed -i "/toto/a La ligne à insérer !!!" texte.txt



Ah oui, en effet, ça marche aussi. Avec sed je me limite uniquement aux
substitutions, du coup je ne pensais pas que c'était possible avec cet
outil.

Merci à toi.
À+

--
François Lafont
Publicité
Poster une réponse
Anonyme