Supprimer une ligne d'1 fichier, perl
medmans
-
josephtux -
josephtux -
Bonjour,
je veux supprimer une ligne d'un fichier en PERL mais je ne connais pas comment faire pour supprimer une ligne sans derranger les autre.
chaque ligne est identifiée par ses 6 premiers caracteres.
Si qlq un peut m'aider svp?
Merci d'avance
je veux supprimer une ligne d'un fichier en PERL mais je ne connais pas comment faire pour supprimer une ligne sans derranger les autre.
chaque ligne est identifiée par ses 6 premiers caracteres.
Si qlq un peut m'aider svp?
Merci d'avance
A voir également:
- Supprimer une ligne d'1 fichier, perl
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier impossible à supprimer - Guide
- Supprimer une page word - Guide
1 réponse
Salut,
l'option -i.orig sers à sauvegarder le fichier original
voici un exemple en ligne de commande lami20j@debian:~/trash$ cat aaa ligne1 ligne2 ligne3 - a supprimer ligne4 ligne5 lami20j@debian:~/trash$ perl -pi.orig -e 's/.*//s if 3..3' aaa lami20j@debian:~/trash$ cat aaa ligne1 ligne2 ligne4 ligne5et avec un script
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl -i.orig use strict;use warnings; while(<>){ print "$_" unless 3 .. 3; } __END__ lami20j@debian:~/trash$ cat aaa ligne1 ligne2 ligne3 - a supprimer ligne4 ligne5 lami20j@debian:~/trash$ perl ccm.pl aaa lami20j@debian:~/trash$ cat aaa ligne1 ligne2 ligne4 ligne5 lami20j@debian:~/trash$ cat aaa.orig ligne1 ligne2 ligne3 - a supprimer ligne4 ligne5 lami20j@debian:~/trash$
l'option -i.orig sers à sauvegarder le fichier original
1 Afficher les 6 premières lignes:
for i in a* c* ; do echo $i ; perl -E 'while (<>) {say if $. < 6}' $i ; done
# un peu plus lisible:
for i in a* c* ; do echo $i ; perl -E 'while (<>) {say "$_" if $. < 6}' $i ; done
# $. est la variable Perl qui contient le numéro de la ligne en cours.
# <> donne accès à la ligne suivante du fichier
2 Supprimer:
#Supprimer les 36 premières lignes:
for i in *; do perl -i -e 'while (<>) {print $_ if $. > 36 }' $i ; done
# Supprimer les lignes reconnues par une regex:
#Supprimer les lignes vides:
for i in *; do perl -i -e 'while (<>) {print $_ if $_=~/^\s*$/ }' $i ; done
ou:
for i in *; do perl -i -e 'while (<>) { $_=~ s/^\s*$// }' $i ; done
# idem en sauvegardant l'original avec l'extension <.bak> :
for i in *; do perl -i.bak -e 'while (<>) { $_=~ s/^\s*$// }' $i ; done
# Supprimer les commentaires (ATTENTION : et plus les $# et autres !# , plus précisément TOUT ce qui suit le 1er caractère "#" sur la ligne : peaufiner le tri si nécessaire
for i in *.txt ; do perl -i.bak -e 'while (<>) { $_=~ s/\s*#.*$// }' $i ; done