IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Des codes sources perlConsultez toutes les FAQ

Nombre d'auteurs : 13, nombre de questions : 59, dernière mise à jour : 27 mai 2011 

 
OuvrirSommaireQuelques unilignes perlTraitements de fichiers

WindowsLinuxMac

Ce code vous permettra de convertir un fichier plat DOS en UNIX en convertissant les retours chariots vers le format unix. Cela permet de supprimer les ^M dans un fichier Mac par exemple. Cela est également pratique pour les fichiers transferés en FTP en mode binaire au lieu de ASCII. C'est léquivalent d'un dos2unix.

 
Sélectionnez
perl -pi.bak -e "s/\r\n/\n/" mon_fichier.txt

Ce code fait une sauvegarde préalable du fichier et supprime les ^M de mon_fichier.txt.

 
Sélectionnez
perl -pi -e "s/\r\n/\n/" mon_fichier.txt

Fait la même chose sans sauvegarde.

Créé le 2011-02-18  par djibril

Windows

Attention : bien qu'efficace, cette méthode est consommatrice de mémoire si vous l'appliquez sur un très gros fichier car ce dernier est entièrement chargé en mémoire.

 
Sélectionnez
perl -ne "print if ! $lignes{$_}++" mon_fichier.txt > nouveau_fichier.txt

Linux Mac

 
Sélectionnez
perl -ne 'print if ! $lignes{$_}++' mon_fichier.txt > nouveau_fichier.txt
Mis à jour le 2011-03-16  par djibril

WindowsLinuxMac

Il peut être utilise d'avoir une petite commande perl permettant de modifier un mot dans un fichier. Cet uniligne est là pour ça. Dans l'exemple ci-dessous, nous changeons le nom de domaine yahoo.fr par developpez.com dans un fichier XML.

annuaire.xml
Sélectionnez
<annuaire>
  <personne>
    <nom>Philou</nom>
    <prenom>Jean-Francois</prenom>
    <telephone>01234567890</telephone>
    <email>toto@yahoo.fr</email>
  </personne>
  <personne>
    <nom>Dupont</nom>
    <prenom>Paul</prenom>
    <telephone>09876543210</telephone>
    <email>titi@yahoo.fr</email>
  </personne>
</annuaire>
avec sauvegarde du fichier original
Sélectionnez
perl -pi.sauvegarde -e "s/yahoo\.fr/developpez\.com/g" annuaire.xml
Créé le 2011-02-22  par djibril
Windows
Sélectionnez
perl -ne "chomp; print join qq{ }, @{[ split /;/ ]}[8,0],$/" fichier.csv
Linux/Unix
Sélectionnez
perl -ne 'chomp; print join qq{ }, @{[ split /;/ ]}[8,0],$/' fichier.csv

WindowsLinux

Dans ce code, l'expression régulière du split constitue le séparateur de colonne du fichier d'entrée passé en paramètre (le retour à la ligne est considéré comme le séparateur de ligne). Les colonnes affichées dans l'exemple sont les colonnes d'indice 8 et 0, dans cet ordre. Elles sont affichées avec le paramètre du join comme séparateur.

fichier.csv
Sélectionnez
col0;col1;col2;col3;col4;col5;col6;col7;col8;col9;col10
test1;test2;test3;test4;test5;test6;test7;test8;test9;test10;test11
resultat
Sélectionnez
col8 col0
test9 test1

Il est possible de raccourcir le code via les options -a -F et -l.

Windows
Sélectionnez
perl -laF';' -ne "print join q( ), @F[8,0]" fichier.csv
Linux/Unix
Sélectionnez
perl -laF';' -ne 'print join qq( ), @F[8,0]' fichier.csv

Ce code correspond à un code perl complet suivant :

 
Sélectionnez
#!/usr/bin/perl
$\ = $/;                            # option -l
while (<>) {                        # option -n
  chomp $_;                         # options -l et -n
  @F = split /;/;                   # option -a et -F
  print join qq( ), @F[8,0];        # option -e
}
Mis à jour le 2011-05-11  par Philou67430, Alek-C, djibril

Windows Linux Mac

 
Sélectionnez
perl -e "print scalar reverse <>" fichier
Mis à jour le 2011-03-16  par djibril
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2011 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.