2010-08-03 4 views
0
#!usr/bin/perl 
$file_name = "file.txt"; 
open(FILE,$file_name); 
while(<FILE>) 
{ 
my $line = $_; 
if($line =~ m/Svr\b/) 
{ 
my $server_name; 
$server_name = $1; 
print $server_name; 
} 
} 

fichier.txt:Pourquoi ce morceau de code ne fonctionne pas en Perl ... Son simple

ewrerfSvr//To be extracted 
Rate=rpm 
ID=123 
RATE=45 
ADDR=retriveBal 
Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --" 
freedonSvr 
BALFSvr //to be extracted 
Rate=rpm1 
ID=12323 
RATE=45etf 
ADDR=retriveBal 
Grocer="-r -e ${MAIN_ROOT}/logs/stderr -o ${MAIN_ROOT}/logs/stdout -A --" 
freedonSvr -D ${REV_AccountBalance_NAME}"// 

Aussi je veux extraire:

REV_AccountBalance 

Donnez-moi suggestion de le faire en utilisant une expression régulière.

+3

Je suggérerais d'indenter votre code ... – xenoterracide

Répondre

4
#!usr/bin/perl 
use strict; 
use warnings; 

my $file_name = "file.txt"; 
open(my $fh,$file_name) or die "Could not open file"; 

while(<$fh>) { 
    if (m/(\w*Svr)\b/) { print "$1\n"; } 
} 

Vous devez vous habituer à utiliser warnings et strict et le piégeage des erreurs des appels comme open.

Et plus précisément en réponse à votre question, vous devez utiliser des parenthèses dans votre expression rationnelle pour extraire dans les variables $N.

+2

'Aux États-Unis, "crochet" se réfère généralement spécifiquement au type "carré" ou "boîte"; dans l'usage britannique, il se réfère normalement à une marque de parenthèse. - http://en.wikipedia.org/wiki/Bracket. Le terme non qualifié "bracket" est donc mieux évité. – ysth

2

$1 vous obtiendrez la partie de la chaîne correspondant à la capture des parenthèses, mais vous ne les avez pas. Voulez-vous dire que votre regex est m/Svr\b(.+)/? S'il vous plaît montrer la sortie que vous voulez obtenir; les commentaires dans file.txt ne sont pas assez explicites.

+0

(m/(\ w * Svr) \ b /) .... fonctionne bien ($ line = ~ m/Svr \ b /) ---- choisi par moi ne fonctionne pas .. Quel est le bigg diff ..Pourquoi la mienne est fausse – Sreeja

+0

@Sreeja: vôtre n'a pas le() qui montre quoi mettre en 1 $ – ysth

+0

Ok.Got it ... merci – Sreeja

Questions connexes