Via un script, insérer une ligne dans un fichier, juste après une ligne correspo ndant à une regex donnée
5 réponses
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
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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
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. :-)
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 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.
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.
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 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
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