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
>
>