grep
et sed
grep expreg fichier
->
imprime les lignes du fichier qui
contiennent expreg
sed expreg edition fichier
-> effectue la commande edition
sur les lignes du fichier
qui contiennent expreg
RegExp
.) String
, Pattern
et Matcher
) split
ou grep
(1er arg. ) :split(/b/, 'aaabccbacbc')
->
('aaa', 'cc', 'ac', 'c')
grep(/a/, ('aaa', 'cc', 'ac',
'c'))
->
('aaa','ac')
(renvoie la sous-liste formée de toutes les
chaînes
contenant une sous-chaîne filtrée par l'e.r. passée en 1er arg.)m
comme match) par rapport à une chaîne, engendrant
une valeur booléenne :"abc" =~ m/b/
->
true
mais "abc" =~ m/d/
-> false
s
comme substitute) par rapport à une variable (ou
plus généralement par rapport à une L-value),my $x = "abc"; $x
=~ s/b/pp/;
==> la variable $x
vaut "appc".
Essai
minimal à faire fonctionner et à modifier.../
' qui encadre l'e.r. dans le
filtre m/e.r./
s/e.r./subst/
.
/
' est utilisable dans tous les cas, m
ou de
substitution s
, on peut choisir un séparateur
quelconque./
' est accepté dans ce cas.foreach my $s ( split( %/%, ' un jour / mon prince /
viendra' )){
print "$s\n";
}
my $ch = ' un jour / mon prince / viendra';
$ch =~ s%/%€%;
un jour € mon prince / viendra
.split( /\//, ' un jour / mon prince /
viendra' )
split( '/', ' un jour / mon prince / viendra' )
/
'./
',
elle n'est pas cette chaîne entre '/
'...my $er = /a/;
",
par exemple, mais bien "my $er = 'a'; grep(/$er/....)
".Luc
12 |
<-----------> | my %tab; $tab{' Maurice '}
= 18 $tab{' Juliette '}
= 07 |
open(ENTREE, "<$fich");
my %tab;
my @tablignes = <ENTREE>;
foreach my $ligne ( @tablignes ){
chomp($ligne); # supprime le "\n" final
my ($le_nom, $la_note) = split( /[ \t]+/, $ligne);
$tab{$le_nom} = $la_note;
}
return %tab;
TxtVersTab.pl
,
avec
un fichier-exemple pour essais NomsNotes.txt
.jfp% perl TxtVersTab.pl NomsNotes.txt
Elsa09Franck12Maurice18Kevin09Elisabeth07Joseph09Josette19Max07Aline12Antoinette12Julien13Alexandre09Ernestine18Mauricette12Jules11Francine13Pierre08Hélène13Jean-Pierre09Juliette07Christine12Paulette09Jacques09Luc12
print %tab
", elle
donne les noms-notes dans un ordre arbitraire, rassemblés en une seule
chaîne.TxtVersTabP.pl
.
[1-9][0-9]*|0([0-7]+|x[0-9A-F]+)
sub extrnb1($){ #arg. nom de fichier
my ($fich) = @_;
open(ENTREE, "<$fich");
my $er = '[1-9][0-9]*|0([0-7]+|x[0-9A-F]+)';
my @tablignes = <ENTREE>;
my @tabnb = grep(/$er/, @tablignes);
foreach my $lgn ( @tabnb ){
print $lgn; #le saut de ligne est resté en
place !
}
}#extrnb
extrnb1.pl
,
donnée
pour essais nb.txt
.
ø
ou 𠊚
my $er = '&#([1-9][0-9]*|x[0-9A-F]+);';
/[*]([^/*]|[/]|[*]+[^/*])*[*]+/
sub supprCommC($){ #arg. nom de fichier
my ($fich) = @_;
open(ENTREE, "<$fich");
my $erc = '/[*]([^/*]|[/]|[*]+[^/*])*[*]+/';
#sans '\'
my @tablignes =
<ENTREE>;
my $txt = join('',
@tablignes); # regroupe toutes les lignes en une seule chaîne
$txt =~ s=$erc=
=; # avec '=' comme séparateur pour ne pas avoir à marquer
les '/' par '\'
print $txt;
}#supprCommC
supprCommC.pl
, donnée
pour essais exCom.txt
. g
(comme global) à la fin de la substitution : $txt =~ s=$erc=
=g;
//[^\n]*\n
sub supprToutComm($){ #arg. nom de fichier
my ($fich) = @_;
open(ENTREE, "<$fich");
my $erc =
'/[*]([^/*]|[/]|[*]+[^/*])*[*]+/'; # la même
my $erfl = '//[^\n]*\n';
# idem
my $er = "$erc|$erfl";
# disjonction ou réunion...
my @tablignes =
<ENTREE>;
my $txt = join('',
@tablignes);
$txt =~ s=$er= =; # avec
'=' comme séparateur
print $txt;
}#supprToutComm
supprCommCFL.pl
,
donnée
supplémentaire pour essais exCom2.txt
.