Eu esperava a saída de
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
ser estar:
aa
já que $ 1 refere-se ao primeiro grupo capturado, que passa a ser "a".
No entanto, o código acima gera:
(a b c)(a b c)
O que estou fazendo de errado?
Respostas:
4 para resposta № 1Primeiro, use aspas simples em * nix, pois não é isso que você deseja:
echo "(a b c)(a b c)" | perl -MO=Deparse -ne "/(a) b/g; print $1"
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
e, em seguida, use o contexto escalar com /g
para percorrer todas as correspondências
echo "(a b c)(a b c)" | perl -ne "print $1 while /(a) b/g"
ou use o contexto da lista para que o regex retorne todas as correspondências de uma só vez,
echo "(a b c)(a b c)" | perl -ne "print /(a) b/g"