Suchen mittels Regex und ausgabe

savvo

Mitglied
Hallo

Ich habe ein Perl Skript der in einer Datei nach einer Zeichenfolge sucht und das Resultat ausgibt mit Zeilennummer.

Code:
  #!/usr/bin/perl
  
  open( DATEI, "<@ARGV[0]" ) or die $!;   # einlesen einer Datei über Parameter
  
  $resultat=0;
  
 while( $zeile = <DATEI> ) {				 # alle Zeilen einlesen
  	$zeilenAnzahl++;
  	if( $zeile =~ m/@ARGV[1]?/i ) { 
  	print "Zeile " . $zeilenAnzahl . ": " . "\n";
  	$resultat++;
  	}
  }
  
  print "\n";
  print "Das Wort \" " . @ARGV[1] . " \"" . " ist in der Datei " . "\" " . @ARGV[0] . " \" " . $resultat . " mal enthalten.";
  
  print "\n\n";
  
 close( DATEI );					 # Datei schliessen

Wie kann ich neben den Zeilennummern nun noch das Wort ausgeben welches die Zeichenfolge beinhaltet?

Gruss
Savvo
 
Hallo,

ich vermute mal, Du meinst so etwas:

while( $zeile = <DATEI> ) { # alle Zeilen einlesen
$zeilenAnzahl++;
if( $zeile =~ m/.*($ARGV[1].).*/i ) {
print $zeile . "\n";
print "Zeile " . $zeilenAnzahl . ": " . $1 . "\n";
$resultat++;
}
}

Die Klammern () in der Regex sind per $1 usw. auslesbar.
Der "." in der Klammer ist genau ein bliebiges Zeichen.

Gruß
Micha2
 
Die Variable $zeilenAnzahl wird nicht benötigt. Perl hat eine eigene Variable dafür (siehe perldoc perlvar)...

Code:
 while( $zeile = <DATEI> ) { # alle Zeilen einlesen
  if( $zeile =~ m/\b([^\b]*?$ARGV[1][^\b]*?)/i ) {
    print $zeile . "\n";
    print "Zeile " . $. . ": " . $1 . "\n";
    $resultat++;
  }
}
 
Hallo renee,

was hälst Du von dieser Lösung:

Code:
export VAR=My...Ex; perl -n -e 'print "$. $1\n" if ($_ =~ m/.*($ENV{"VAR"}).*/i)' Dateiname1 Dateiname2 ...

Die regex wird per Umgebungsvariable ENV übergeben. Es wird mit einer Zeile in mehreren Dateien gesuchen und die Schleife/open/close kann perl sowieso (a2p läßt grüssen).
 
Zurück