2014-07-07 2 views
0

Dans le script shell, grep -Eo {regex} {file} renvoie la partie correspondante de l'expression régulière. Par exemple:Perl, équivalent de grep -Eo

$ echo \ 
'For support, visit <http://www.example1.com/support> 
You can also visit <http://www.example2.com/products> for information.' 
| grep -Eo 'http://[a-z0-9_.-]+/' 

http://www.example1.com/ 
http://www.example2.com/ 

Comment est-ce que je ferais ceci avec Perl?

Répondre

4

Voici deux façons:

  1. En Perl, la $& variable spéciale contient la partie adaptée de l'expression régulière.

    perl -ne 'print "$&\n" if m#http://[a-z0-9_.-]+/#' < input 
    
  2. Si votre expression régulière contient des groupes de capture, les motifs appariés par ces groupes sont affectés aux variables $1, $2 ...

    perl -ne 'print "$1\n" if m#(http://[a-z0-9_.-]+/)#' < input 
    
3

Pour obtenir -o fonctionnalité Je suggère ce qui suit:

echo abcdabcd | perl -lne 'while ($_ =~ s/(bc)//){print $1}' 
bc 
bc 

echo abcdabcd | grep -Eo 'bc' 
bc 
bc 

Mais pour vous exemple je suggère perl -pe 's|(http://[\w-\.]+/).*|$1|g':

echo 'http://www.example1.com/support' | perl -pe 's|(http://[\w-\.]+/).*|$1|g' 
http://www.example1.com/