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 à