2010-01-27 4 views
0

Je dois rechercher une phrase dans plusieurs fichiers et afficher les résultats à l'écran.Comment puis-je passer d'une instruction sed à Perl en ligne de commande?

grep "EMS" SCALE_* 
| sed -e "s/SCALE_//" -e 
"s/_main_.*log:/ /" 

Depuis que je suis reçois pas familier avec sed, je changer à Perl pour une utilisation pratique.

grep "EMS" SCALE_* 
| perl -e "s/SCALE_//" -e 
"s/_main_.*log:/ /" 

ou

grep "EMS" SCALE_* 
| perl -e "s/SCALE_//; s/_main_.*log:/ /" 

Cependant, le dernier est compilé mais ne retourne rien sur la ligne de commande. Toute suggestion pour modifier mon code. Un grand merci!

+0

Je vous suggère d'apprendre sed, ou perk, ou les deux. Langues très pratiques. –

Répondre

2

si vous voulez utiliser Perl, essayez cette entièrement en Perl

while (<>){ 
    chomp; 
    if ($_ =~ /EMS/){ 
     s/SCALE_//g; 
     s/main.*log://g; 
     print $_."\n"; 
    } 
} 

sur la ligne de commande

$ perl perl.pl SCALE_* 

ou cette

$ perl -ne 'if (/EMS/){ s/SCALE_//g;s/main.*log://g; print $_} ;' SCALE_* 
3

Vous n'êtes pas en boucle sur les lignes d'entrée avec perl. Découvrez -p ou -n dans la page de manuel perlrun.

8

Pour utiliser perl dans le style de sed vous devriez essayer le drapeau -p:

perl -p -e "s/SCALE_//;" -e "s/_main_.*log:/ /;" 

De l'explication perlrun:

-p

à Perl assumer la boucle suivante autour de votre progra m, ce qui le fait itérer sur les arguments de nom de fichier un peu comme sed:

LINE: 
    while (<>) { 
    ...    # your program goes here 
    } continue { 
    print or die "-p destination: $!\n"; 
    } 
Questions connexes