Cet article vous présente l'ensemble des outils que Perl met à votre disposition pour l'écriture d'unilignes.
Un uniligne Perl est une commande tenant sur une seule ligne, mais qui peut utiliser les options de l'interpéteur perl ce qui va rentre cette ligne très performante. Cela revient à faire de perl un remplacement d'un ensemble de tubes avec des commandes comme sed, cut, sort , etc..
Cet article reprend ce que j'ai écris truc PERL pour shell, ainsi que dans one liner en PERL, mais j'ai classé par option de l'interpréteur perl (,-i,-ne,-ane ...)
Le perl est utilisé sous windows. Cela oblige à créer les lignes de codes entre deux " et non entre '. comme sous unix ou linux Les parenthèses utilisées dans cette ligne doivent être remplacées par \" pour que la syntaxe soit correcte..
écrire une ligne |
perl -e "print \"phase 1\n\""
phase 1 |
afficher n fois le même caractère , par exemple pour tracer une ligne.
Pour certains caractères, il faut utiliser chr() |
perl -e "print \"\-\" x 32"
-------------------------------- perl -e "$c=chr(61); print \"$c\" x 32" ================================ |
calculer une valeur |
perl -e "print 34+56+sqrt(2), \"\n\" "
91.4142135623731 |
afficher la date |
perl -e "use Time::Local;print scalar localtime(timeloca(0,10,9,25,6,2016));"
Mon Jul 25 09:10:00 2016 |
tirer un dé ou nombre aléatoire entre 0 et 100% |
perl -e "print int(rand(6))+1"
perl -e "print int(rand(101))" |
trier un fichier | perl -e "print sort <>" fichier.txt |
afficher l'alphabet |
perl -le "$, = \" \"; print (\"a\"..\"z\")"
a b c d e f g h i j k l m n o p q r s t u v w x y z |
grep en perl | perl -ne "print if /for/" fichier.txt |
compter le nombre de lettres dans un fichier |
perl -ne "END{print \"$n lettres e\n\"} $n += y/e//" fichier.txt
106 lettres e |
compter le nombre de ligne |
perl -ne "END{print \"$n lignes\n\"} $n += y/\n//" fichier.txt
56 lignes perl -le "print scalar(()=<>)" fichier.txt |
supprimer les ligne entre 2 et 3 |
perl -ne "print unless 2 .. 3" liste.txt
1
4 5 |
extraire un paragraphe entre deux mots clés. |
perl -ne "print if /^=pod/ .. /^=cut/" pod.txt
=pod doc perl =cut |
afficher le fichier à raison d'un mot par ligne |
perl -ne "print join(\"\n\", split(/ /,$_));print(\"\n\")"fichier.txt
le fichier .. |
supprimer les lignes vides d'un fichier |
perl -ne "print unless /^$/" liste.txt
perl -ne "print if /\S/" l.txt |
compter le nombre de lignes | perl -ne "}{print $." fichier.txt |
remplacer une chaine par une autre | perl -pe "s/toto/tata/" fichier.txt > nouveau_fichier.txt |
équivalent d'un grep -v | perl -pe "$_ ='' if /toto/" fichier.txt |
afficher les 3 premières lignes d'un fichier |
perl -pe "exit if $. >3"fichier.txt
perl -pe '4..exit' fichier.txt perl -pe '3...exit' fichier.txt |
afficher les lignes 10 à 15 d'un fichier | perl -ne "print if 10..15"fichier.txt |
afficher la date correspondantà un timestamp |
perl -ne "print scalar gmtime,\" \",$_"
Mon Jul 25 13:23:40 2016 1398331554 |
ajouter une chaine en début de ligne | perl -pe "s/(.*)/string\t$1/" fichier.txt |
numérote les lignes d'un fichier |
perl -pe "$_ = \"$. $_\"" fichier.txt
1 le fichier tata.txt est prÛt. 2 On peut travailler avec. |
L'option -i vous permet de faire de l'édition sur place, c'est-à-dire de modifier directement le fichier que vous êtes en train de traiter.
remplacer une chaine par une autre dans un fichier | perl -i -pe "s/toto/tata/" fichier.txt |
remplacer une chaine par une autre dans un fichier avec backup du fichier | perl -i -pe "s/toto/tata/" fichier.txt |
supprimer un paragraphe entre deux mots clés | perl -i.old -ne "print unless /^BEGIN$/ .. /^END$/" fichier.txt |
compter le nombre de lignes |
perl -le "print $n=()=<>" liste.txt
9 |
générer un mot de passe simple |
perl -le "print map { (\"a\"..\"z\")[rand 26] } 1..8"
rylgqhmk |
générer un mot de passe plus compliqué |
perl -le "print map { (\"a\"..\"z\", 0..9,\"A\"..\"Z\")[rand 60] } 1..16"
yQyN5mpqM4G5os3J |
mettre un fichier en minucsule | perl -lne "tr/[A-Z]/[a-z]/" fichier.txt |
mettre un fichier en majuscule | perl -lne "tr/[a-z]/[A-Z]/" fichier.txt |
compter le nombre de lignes |
perl -lne "END { print $. }" liste.txt
9 |
L'option -a ajoute un split() au début de la boucle implicite créée par -n ou -p. Le résultat du split est stocké dans le tableau @F.
extraire la première colonne d'un tableau ou les colonnes 4 et 5 |
perl -lane 'print $F[0] ' data.csv
perl -lane 'print shift @F' data.csvperl -lane 'print $F[4] $F[5]' data.csv |
l'option -m :permet de charger un module et d"étendre considérablement les possibilitées offertes par Prel.
afficher la date |
perl -e "use Time::Local;print scalar localtime(timeloca(0,10,9,25,6,2016));"
Mon Jul 25 09:10:00 2016 |