Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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

5 réponses

Avatar
Arnaud Gomes-do-Vale
Francois Lafont writes:

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/
Avatar
Francois Lafont
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
Avatar
moi-meme
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.
Avatar
Michel Suquet (Collège Jean-Monnet 91640 Briis-sous-Forges)
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
Avatar
Francois Lafont
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