1 votes

Perl + Traduire la syntaxe Shell Shell en perl + expression régulière

Dans mon /var/tmp J'ai les fichiers suivants :

 ls | grep FILE
   AAA-FILE.xml
   BBB-FILE.xml

Avec la commande suivante, je coupe le premier mot des fichiers comme suit :

ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"

J'ai compris :

AAA
BBB

Comment puis-je faire la même chose avec Perl afin d'insérer les "AAA" et "BBB" dans @RESULTS ? Par exemple :

@RESULTS=perl syntax ...

3voto

Karthik T Points 385

En supposant que vous voulez continuer à utiliser la commande existante, vous pourriez faire

my @results = `ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"`;
chomp for @results;

le chomp est pour se débarrasser de la nouvelle ligne qui suit.

Sans avoir recours à l'appel de commandes externes :

my @results;
opendir DIR,"/var/tmp" or die "Cannot open dir: $!";
for (readdir DIR) {
    /(.*)-FILE.*/ or next;
    push @results, $1;
}
closedir DIR;

2voto

Mike Points 978

@RESULTS = grep(s[/var/tmp/(.*)-FILE.xml][$1],</var/tmp/*>);

2voto

Nick Points 81
@RESULTS = map /(.*)-FILE\.xml$/, <*-FILE.xml>;

1voto

Nick Points 81
@RESULTS = map m#/var/tmp/(.*)-FILE.xml#, </var/tmp/*-FILE.xml>;

1voto

decibel Points 341
perl -nE'next unless s/-FILE.*//; push state @lines, $_; die @lines if eof;' /var/tmp

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X