User Tools

Site Tools


informatique:perl

Differences

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

Link to this comparison view

Next revision
Previous revision
informatique:perl [2010/01/13 09:36] – créée pteuinformatique:perl [2017/09/26 14:33] (current) – [Tips] substitution multi-lignes pteu
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 14:33 by pteu