Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |
informatique:perl [2013/10/14 20:44] – modification externe 127.0.0.1 | informatique:perl [2017/09/26 14:33] (current) – [Tips] substitution multi-lignes pteu |
---|
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 |
| |