Imprimindo subgrupos correspondentes em um forro de perl one

0

Eu tenho o regex [1]

(/foo/bar/(GW|GREV)[^/]*).*

Consegui fazer isso funcionar com o GNU sed com

sed -n 's/\(\/foo\/bar\/\(GW\|GREV\)[^\/]*\).*//p'

Mas esse foi um moderno GNU sed e eu estou no Solaris 10 com um antigo sed. Talvez seja possível portá-lo, mas isso está além da minha capacidade. Eu tenho o perl 5.8 disponível para mim, então, minha pergunta: como posso obter o subgrupo correspondente impresso em um forro de perl?

[1] A essência é que eu quero corresponder todos os diretórios que correspondem ao formulário / foo / bar / GWxxx, / foo / bar / GREVxxx e imprimir esse diretório raiz. Portanto, para as seguintes strings, sempre obtenho /foo/bar/GREV123 como o grupo capturado:
/foo/bar/GREV123
/foo/bar/GREV123/
/foo/bar/GREV123/etc
    
por ldrg 22.09.2015 / 23:20

1 resposta

1
perl -pe 's{^(/foo/bar/(GW|GREV)[^/]*).*?$}{$1}o'

Versão detalhada:

LINE: while (defined($_ = <ARGV>)) {
    s[^(/foo/bar/(GW|GREV)[^/]*).*?$][$1]o;
}
continue {
   die "-p destination: $!\n" unless print $_;
}

P.S. Você pode adicionar código para suprimir a impressão de entradas duplicadas

    
por 23.09.2015 / 08:29

Tags