Perl "OneLiner"
Perl a ceci de merveilleux qu'il peut être utilisé comme un formidable outil d'expérimentation.
Avec un simple switch "-e" on peut partir à l'aventure :
perl -e "print qq(Coucou le hibou)"
Coucou le hibou
Ainsi voici un chtit Search & Replace bien pratique sur le contenu d'un fichier:
perl -pe 's/oldstring_re/newstring/gi ' MyFile.txt
On verse dans le délire intégral ? Ok alors on a un fichier log d'un serveur web, qqch du style :
2003-02-06 06:34:41 10.18.15.9 SUISSE_VS\assa0018 W3SVC3 10.180.7.40 80 GET /goeland/parc/xml/CityWithParcelle.xml - 304 0 141 602 15
2003-02-06 06:34:41 10.13.21.4 SUISSE_VS\cmrs0062 W3SVC3 10.180.7.40 80 GET /goeland/parc/xsl/CGComboCityWithParcelle.xsl - 304 0 141 368 0
2003-02-06 06:34:43 10.18.15.42 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 POST /goeland/parc/xml/CNGetDataParcelle.asp - 200 0 89 739 922
2003-02-06 06:34:43 10.12.2.49 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 GET /groeland/parcelle/xsl/CNDataParcelle.xsl - 304 0 140 358 0
En quatrième position et séparé par des espaces on a un nom de login, on veut obtenir une liste ordonnée de ces logins avec leur nombre de hits, soit le nombre de fois que l'on a trouvé des lignes dans le fichier log pour cet utilisateur. Et bien en une ligne avec du Perl ça donne :
perl -ne "if (m/^[^# ]([^ ]+)\s([^ ]+)\s([^ ]+)\s([^ ]+)/gi) { $tmp=qq(\U$4); %MyHash =(%MyHash,$tmp, $MyHash{ $tmp }+1); } END{foreach $key (sort keys %MyHash) {print qq($key => $MyHash{$key}\n);}}" ./ex030208.log
Et on obtient quelquechose du style :
SUISSE_VS\assa6018 => 32
SUISSE_VS\cmrs0062 => 160
etc...
Avec un simple switch "-e" on peut partir à l'aventure :
perl -e "print qq(Coucou le hibou)"
Coucou le hibou
Ainsi voici un chtit Search & Replace bien pratique sur le contenu d'un fichier:
perl -pe 's/oldstring_re/newstring/gi ' MyFile.txt
On verse dans le délire intégral ? Ok alors on a un fichier log d'un serveur web, qqch du style :
2003-02-06 06:34:41 10.18.15.9 SUISSE_VS\assa0018 W3SVC3 10.180.7.40 80 GET /goeland/parc/xml/CityWithParcelle.xml - 304 0 141 602 15
2003-02-06 06:34:41 10.13.21.4 SUISSE_VS\cmrs0062 W3SVC3 10.180.7.40 80 GET /goeland/parc/xsl/CGComboCityWithParcelle.xsl - 304 0 141 368 0
2003-02-06 06:34:43 10.18.15.42 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 POST /goeland/parc/xml/CNGetDataParcelle.asp - 200 0 89 739 922
2003-02-06 06:34:43 10.12.2.49 SUISSE_VS\rsta0015 W3SVC3 10.180.7.40 80 GET /groeland/parcelle/xsl/CNDataParcelle.xsl - 304 0 140 358 0
En quatrième position et séparé par des espaces on a un nom de login, on veut obtenir une liste ordonnée de ces logins avec leur nombre de hits, soit le nombre de fois que l'on a trouvé des lignes dans le fichier log pour cet utilisateur. Et bien en une ligne avec du Perl ça donne :
perl -ne "if (m/^[^# ]([^ ]+)\s([^ ]+)\s([^ ]+)\s([^ ]+)/gi) { $tmp=qq(\U$4); %MyHash =(%MyHash,$tmp, $MyHash{ $tmp }+1); } END{foreach $key (sort keys %MyHash) {print qq($key => $MyHash{$key}\n);}}" ./ex030208.log
Et on obtient quelquechose du style :
SUISSE_VS\assa6018 => 32
SUISSE_VS\cmrs0062 => 160
etc...
Commentaires