Un seul langage pour les scriptsRemplacer sed, awk, grep, par perl
Jul 6Niveau :
Résumé : perl -i -pe
La puissance de perl en fait un excellent remplaçant de sed, awk et grep réunis. Il permet de n'apprendre qu'une syntaxe plutôt que 3 et de plus possède des expressions régulières très puissantes.
Je vais tenter de vous convaincre par l'exemple à partir de quelques tâches courantes effectuées habituellement avec ces outils.
Commenter des lignes comme en sed :
$ sed 's/^/#/' $ perl -pe 's/^/#/'
Formater des lignes comme en awk :
$ awk '{print "$1:$3"}' $ perl -ne 'split; print "$_[0]:$_[2]\n"'
Sélectionner des lignes comme en grep :
$ grep "^[0-9]" $ perl -ne 'print if /^[0-9]/'
Perl dispose de l'option -i comme sed. Cette option permet d'éditer les fichiers en ligne. Si un mot est ajouté après -i, le fichier sera sauvegardé.
$ perl -i.bak -pe '$i++; s/^/$i /' file # numérote les lignes du fichier
Tout comme awk, perl supporte l'exécution de code au début et à la fin de la boucle :
# Implémentation de head en perl $ perl -ne 'BEGIN{$i=10}{print if $i-->0}'
# Implémentation de wc -l en perl $ perl -ne '{$i++}END{print "$i\n"}'
L'avantage d'utiliser perl est que le jour où vous voulez faire grossir votre script, c'est très simple.
perl -pe '...' # Devient dans un fichier de script while(<>) { ... ; print }
perl -ne '...' # Devient dans un fichier de script while(<>) { ... }
Par exemple faisons grossir notre wc pour afficher un peu plus de choses :
#!/usr/bin/perl $char=0; $word=0; $line=0; while(<>) { $char += length; split; $word += scalar @_; $line++; } print "$line $word $charn";
Comments