Re: [ssfr] perl onliner crash course

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


hello,

On Wed, Sep 14, 2011 at 02:20:46PM +0200, Stephane Ascoet wrote:
> Le mercredi 31 août 2011 18:52:05, Marc Chantreux a ecrit :
> 
> > | perl -lnE '
> > 
> >     print if /#ERROR:(.*)/x && $1 ne "Unable to load decompression library"
> > '
> > 
> Bonjour,

> comment cette commande s'utilise t-elle exactement?

comme un mélange de sed et de awk :-)


> Deja, Perl me 
> dit que l'option -E n'existe pas(a remplacer par -e?).

puis-je savoir sur quel systeme tu tournes et si tu as moyen de mettre
ton perl a jour? ( -E est introduit dans perl 5.10 qui date quand meme
de 2007, nous en sommes a la 5.14 et les evolutions sont allées bon
train...).

sinon: voila rapidement qq oneliners qui remplacent sed, awk et consort
histoire de te faire piger comment ca marche (j'espere ne pas avoir
tappé a coté) (je tiens a dire que c'est le tout debut des onliners et
que la puissance du truc est assez énorme! a tel point que, comme je le
disais: je n'utilise plus du tout awk, je garde sed parceque parfois
plus concis ... '/root/p;10q' restera imbattable en terme de taille :) )

tout d'abord: les idées générales:

les variables:

    awk   perl
    $0    $_    # avec la notion d'implicité qui va avec
    NR    $.  

les flags:

perl -nE "$script"         =>  sed -n "$script"
perl -pE "$script"         =>  sed "$script"
perl -ibak -pE "$script"   =>  sed -ibak "$script"
perl -a -pE "$script"      =>  awk "$script"
    $F[0], $F[1], ...      =>      $1, $2, $3, ...
perl -aF: -pE "$script"    =>  awk -F: "$script"
    $F[0], $F[1], ...      =>      $1, $2, $3, ...

sauf que c'est du perl: donc $_ peut etre utilisé par des operateurs
facon sed:

sed -n '/toto/p'  => perl -ne 'print if /toto/'
sed 10q           => perl -pe 'exit  if $. > 10'

perl comprend les blocks BEGIN et END facon awk:

perl -nE '
    BEGIN { print "on va commencer\n" }
    END   { print "fini pour moi\n" }
    exit if $. > 10;
    print if /root/;
' /etc/passwd

> -- 
> Bien cordialement, Stephane Ascoet
> 
> 



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/