(sed/Perl) supprimer des lignes d'un fichier
Résolu
titexe
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
phoenix1984 -
phoenix1984 -
Bonjour,
comment supprimer les 2 premiers lignes d'un fichier et les 2 derniéres lignes d'un fichier ,
sachant que chaque fichier peuvent avoir un nombre de lignes différent de l'autre.
Merci d'avance,
Cordialement.
comment supprimer les 2 premiers lignes d'un fichier et les 2 derniéres lignes d'un fichier ,
sachant que chaque fichier peuvent avoir un nombre de lignes différent de l'autre.
Merci d'avance,
Cordialement.
A voir également:
- (sed/Perl) supprimer des lignes d'un fichier
- Supprimer rond bleu whatsapp - Guide
- Fichier bin - Guide
- Impossible de supprimer un fichier - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
9 réponses
Salut,
et voilà en Perl
j'ai considéré aussi la possibilité que le fichier commence et se fini avec des lignes vides qu'on ne veux pas les prendre en compte
donc les lignes 1 et 2 et 14 et 15 sont vides (je ne les comptes pas)
Si je veux prendre en compte les lignes vides (si jamais elles existent)
et voilà en Perl
j'ai considéré aussi la possibilité que le fichier commence et se fini avec des lignes vides qu'on ne veux pas les prendre en compte
$ grep -n '^.*$' fichier 1: 2: 3:1 4:2 5:3 6: 7:4 8:5 9: 10:6 11:7 12:8 13:9 14: 15:
donc les lignes 1 et 2 et 14 et 15 sont vides (je ne les comptes pas)
$ perl -e '@f=<>;pop @f while($f[-1]=~/^$/);shift @f while($f[0]=~/^$/);print@f[2..$#f-2]' fichier > resultat $ cat resultat 3 4 5 6 7
Si je veux prendre en compte les lignes vides (si jamais elles existent)
$ perl -e '@f=<>;print@f[2..$#f-2]' fichier > resultat $ cat resultat 1 2 3 4 5 6 7 8 9
Salut,
Un exemple :
sed -i.bak '1,2d;$d' ligne.txt && sed -i.old '$d' ligne.txtLes "-i.bak" et "-i.old" c'est pour faire une copie de sauvegardes des fichiers originaux.
Un exemple :
[jp@MDK tmpfs]$ cat ligne.txt 1ère ligne 2ème ligne 3ème ligne 4ème ligne 5ème ligne 6ème ligne 7ème ligne 8ème ligne 9ème ligne 10ème ligne [jp@MDK tmpfs]$ sed -i.bak '1,2d;$d' ligne.txt && sed -i.old '$d' ligne.txt [jp@MDK tmpfs]$ cat ligne.txt 3ème ligne 4ème ligne 5ème ligne 6ème ligne 7ème ligne 8ème ligne [jp@MDK tmpfs]$;-))
Re,
On utilise le tableau spécial @ARGV
Tu lances avec la commande
On utilise le tableau spécial @ARGV
#!/usr/bin/perl -i.orig use strict;use warnings; @ARGV=("/chemin/vers/fichier1", "/chemin/vers/fichier2"); while(<>){ print "$_" for 289 .. eof(); } __END__
Tu lances avec la commande
perl /chemin/vers/suppr_lignes.pl
Bonjour,
j'ai un petit soucis avec le script d'hier ... je n'avais pas eu le temps de le tester avant ce matin ..
contenu de mon répertoire :
fichier.log
suppr_ligne.pl
contenu du script
#!/usr/bin/perl -i.orig
use strict;use warnings;
@ARGV=("fichier.log");
while(<>){
print "$_" for 289 .. eof();
}
__END__
une fois le script exécuté, le fichier fichier.log est vide et tout le contenu est bien présent dans la sauvegarde fichier.log.orig
étrange ... et le fichier initial contient bien plus de 288 lignes ...
Si tu as une réponse je suis preneur, je continue à chercher de mon côté
merci !
j'ai un petit soucis avec le script d'hier ... je n'avais pas eu le temps de le tester avant ce matin ..
contenu de mon répertoire :
fichier.log
suppr_ligne.pl
contenu du script
#!/usr/bin/perl -i.orig
use strict;use warnings;
@ARGV=("fichier.log");
while(<>){
print "$_" for 289 .. eof();
}
__END__
une fois le script exécuté, le fichier fichier.log est vide et tout le contenu est bien présent dans la sauvegarde fichier.log.orig
étrange ... et le fichier initial contient bien plus de 288 lignes ...
Si tu as une réponse je suis preneur, je continue à chercher de mon côté
merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tres bien, ca fonctionne parfaitement avec IF, donc pour résumer ton code :
#!/usr/bin/perl -i.orig
use strict;use warnings;
@ARGV=("fichier.log");
while(<>){
print "$_" if 289 .. eof();
}
__END__
Ce script efface tres bien les 288 premières lignes du fichier!
Merci à toi lami20j !! :D
#!/usr/bin/perl -i.orig
use strict;use warnings;
@ARGV=("fichier.log");
while(<>){
print "$_" if 289 .. eof();
}
__END__
Ce script efface tres bien les 288 premières lignes du fichier!
Merci à toi lami20j !! :D
Hello !
alors cette commande fonctionne tres bien ... dans mon cas il s'agit de supprimer les 288 lignes d'un fichier .. par contre je souhaiterais passer cette commande directement dans un programme PERL ..
je ne vois pas comment passer les fichiers en arguments par contre ...
merci de votre aide ! :)
alors cette commande fonctionne tres bien ... dans mon cas il s'agit de supprimer les 288 lignes d'un fichier .. par contre je souhaiterais passer cette commande directement dans un programme PERL ..
je ne vois pas comment passer les fichiers en arguments par contre ...
merci de votre aide ! :)
Re,
Pour les 288 premières lignes par exemple (Attention: je n'ai pas testé)
Tu écris dans un script que tu l'appelleras suppr_lignes.pl
Ensuite tu lances le script avec la commande
Pour chaque fichier une sauvegarde sera faite avec l'extension .orig
Pour les 288 premières lignes par exemple (Attention: je n'ai pas testé)
Tu écris dans un script que tu l'appelleras suppr_lignes.pl
#!/usr/bin/perl -i.orig use strict;use warnings; while(<>){ print "$_" for 289 .. eof(); } __END__
Ensuite tu lances le script avec la commande
perl /chemin/vers/suppr_lignes.pl fichier1 fichier2 ....... fichierN
Pour chaque fichier une sauvegarde sera faite avec l'extension .orig
merci !! :)
oui c'est bien les 288 premieres ligne ... oublié de préciser pardon ...
par contre mon vrai soucis serait de piuvoir mettre le nom des fichiers dans le programme ...
c'est des noms fixes ... je pensais utiliser des variables, mais je ne vois pas comment faire pour faire pointer la commande de suppression sur ces fichiers dans le programme ...
Merci à toi :)
oui c'est bien les 288 premieres ligne ... oublié de préciser pardon ...
par contre mon vrai soucis serait de piuvoir mettre le nom des fichiers dans le programme ...
c'est des noms fixes ... je pensais utiliser des variables, mais je ne vois pas comment faire pour faire pointer la commande de suppression sur ces fichiers dans le programme ...
Merci à toi :)