Очаквах изхода на
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
да бъде:
aa
тъй като $ 1 се отнася до първата заснета група, която е "а".
Въпреки това горните кодове извеждат:
(a b c)(a b c)
Какво правя грешно?
Отговори:
4 за отговор № 1Първо използвайте единични кавички под * nix, тъй като това не е това, което искате:
echo "(a b c)(a b c)" | perl -MO=Deparse -ne "/(a) b/g; print $1"
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
и след това използвайте скаларен контекст с /g
за да прегледате всички съвпадения
echo "(a b c)(a b c)" | perl -ne "print $1 while /(a) b/g"
или използвайте контекст на списъка, така че regex връща всички съвпадения наведнъж
echo "(a b c)(a b c)" | perl -ne "print /(a) b/g"