User Tools

Site Tools


informatique:perl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
informatique:perl [2013/10/14 22:44]
127.0.0.1 modification externe
informatique:perl [2017/09/26 16:33] (current)
pteu [Tips] substitution multi-lignes
Line 11: Line 11:
 perl -le 'print $!+0, "​\t",​ $!++ for 0..127'​ perl -le 'print $!+0, "​\t",​ $!++ for 0..127'​
 </​code>​ </​code>​
 +
 +====Substitution multi-lignes====
 +//(à la différence de **sed** qui opère ligne par ligne)//
 +
 +Perl permet facilement de faire des recherches/​substitutions sur plusieurs lignes dans un fichier ; par exemple pour supprimer toutes les lignes contenues entre les balises "​-----BEGIN"​ et "​-----END"​ dans le fichier FILE (IRL cela sert à supprimer les certificats dans les fichiers de configuration des Fortigate) :
 +<code bash>
 +perl -0777 -i -pe '​s/​[[:​blank:​]]*set [a-zA-Z0-9-_]* "​-----BEGIN.*?​-----END.*?​\n//​igs'​ FILE
 +</​code>​
 +
 +Explications :
 +  * ''​-0777''​ impose à perl de lire tout le fichier d'un seul coup
 +  * ''​-e''​ spécifie que le code perl est fourni en argument dans la ligne de commande
 +  * ''​-p''​ permet de boucler
 +  * ''​-i''​ permet d'​altérer le fichier source directement (sans spécifier de fichier destination)
 +Pour l'​expression régulière :
 +  * ''​s/''​ permet d'​introduire une substitution (rappel : ''​m/''​ (ou juste ''/''​) pour juste rechercher)
 +  * .*''?''​ : quantificateur non gourmand (non-greedy),​ indique que ''​.*''​ doit matcher le plus court motif possible (par défaut c'est le plus long)
 +  * ''​g''​ permet d'​appliquer autant de fois possible la substitution
 +  * ''​s''​ pour travailler en mode ligne unique (les sauts de ligne sont "​transformés"​ en \n)
 +  * ''​i''​ rend le motif insensible à la casse
 +
informatique/perl.txt · Last modified: 2017/09/26 16:33 by pteu