Perl + Traduzir a sintaxe do script de shell para perl + expressão regular

1

No meu /var/tmp , tenho os seguintes arquivos:

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

Com o seguinte comando, cortei a primeira palavra dos arquivos da seguinte forma:

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

Eu recebo:

AAA
BBB

Como posso fazer a mesma coisa com o Perl para inserir o "AAA" e o "BBB" no @RESULTADOS? Por exemplo:

@RESULTS=perl syntax ...
    
por yael 15.07.2010 / 12:27

5 respostas

3

Supondo que você queira continuar usando o comando existente, você pode fazer

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

o chomp é se livrar da nova linha à direita.

Sem recorrer à chamada de comandos externos:

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

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

    
por 15.07.2010 / 13:00
2
@RESULTS = map /(.*)-FILE\.xml$/, <*-FILE.xml>;
    
por 29.07.2010 / 17:56
1
@RESULTS = map m#/var/tmp/(.*)-FILE.xml#, </var/tmp/*-FILE.xml>;
    
por 29.07.2010 / 18:02
1
perl -nE'next unless s/-FILE.*//; push state @lines, $_; die @lines if eof;' /var/tmp
    
por 29.07.2010 / 18:14

Tags