Como obter o nome do arquivo se o regexp específico estiver presente no arquivo em Perl

0

Em um diretório que contém muitos arquivos, se um regexp (ou formato) específico foi encontrado no arquivo, eu gostaria de obter esse nome de arquivo

Exemplo:

  1. Se a palavra "rama" for encontrada no arquivo chamado ramayana, imprima o nome de arquivo "ramayana"

  2. se um arquivo contiver um formato específico como " (TEXT - NUMBERS) " em um nome de arquivo chamado tabela, imprima essa tabela de nome de arquivo no shell que foi muito fácil, algo como

    grep "mytext" * | cut -d':' -f1 | uniq

    mas como fazê-lo em perl

Sugestões sobre módulos úteis do CPAN também são apreciadas.

    
por user1228191 24.02.2012 / 10:45

1 resposta

3

Talvez eu tenha perdido um ponto, mas se o seu pedido original é basicamente o mesmo com isto:

grep -l "mytext" *

Então seu perl equivalente poderia ser escrito como:

perl -ne 'if(/mytext/){print"$ARGV\n";close ARGV}' *

Observação para os leitores: o código a seguir é atualizado de acordo com os comentários do proprietário, não totalmente compatível com a pergunta original.

#!/usr/bin/perl

@list_code=qw{ over 100 elements here };
@original=@ARGV;

foreach $ele (@list_code) {
  @ARGV=@original;
  @found=();
  while (<>) {
    if (/\Q$ele\E/) {
      push @found,$ARGV;
      close ARGV;
    }
  }
  print "$ele found in ",scalar @found," files : \n",join "\n",@found,'';
}
    
por 24.02.2012 / 11:16

Tags