Jean-Francois Dive wrote:
excellent tiens, je ne connaissais pas le -p , bon ca, bon ca..

Yeps ;-)


En fait, j'ai fait une petite erreur:

-n = "while (<>) { ... }"
-p = "while (<>) { ... ; print $_; }"

Donc -p == -n + print $_

;-)

Un truc plutôt génial aussi, c'est -i :

perl -p -i.old -e 's/foo/bar/g' spam

Avec le -i (suivi/accolé d'une extension de fichier), Perl prend le(s) fichier(s) en paramètres ("spam" dans l'exemple), en fait d'abord un "mv" avec l'extension indiquée dans le -i (".old" dans l'exemple), l'utilise ensuite comme source pour l'expression ('s/foo/bar/g'), ceci combiné au -p qui donne la boucle while autour de STDIN comme décrit ci-dessus. Le résulat est ensuite écrit dans le nom de fichier original ("spam" dans l'exemple).

En clair, la ligne perl ci-dessus revient à faire ceci:

mv spam spam.old
perl -e 'while (<>) { s/foo/bar/g; print $_; }' < spam.old > spam

On peut également ajouter un préfixe, déplacer l'ancienne version dans un autre répertoire, etc...
Il suffit pour cela d'utiliser "*" dans l'extension spécifiée derrière le -i: "*" sera remplacé par le nom du fichier.


En outre, si l'on ne spécifie rien derrière le "-i", le fichier original est tout simplement écrasé (pas de backup donc).

Et puis il y a encore une possibilité bien scabreuse à la Perl d'utiliser cela pour copier des fichiers:

perl -pi 'brol/*.orig' -e 1 a b c d e f g h

Avec cette ligne-là, les fichiers a, b, c, d, e, f, g et h seront copiés avec l'extension ".orig" dans le sous-répertoire "brol".
Aucune modification n'est faite étant donné que l'expression "1" en Perl ne fait rien du tout et retourne OK ;-)


Plus d'infos dans "man perlrun" => "-i"

--
  -o) Pascal Bleser        http://guru.unixtech.be
  /\\ <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>
 _\_v The more things change, the more they stay insane.

_______________________________________________________
Linux Mailing List - http://www.unixtech.be
Subscribe/Unsubscribe: http://www.unixtech.be/mailman/listinfo/linux
Archives: http://www.mail-archive.com/[EMAIL PROTECTED]
IRC: efnet.unixtech.be:6667 - #unixtech

Répondre à