Leser: 10
1 2 3 4 5 6
my @konfig = <FH1>; foreach $zeile (@konfig) { if ( $zeile =~ $string1 ){ print $zeile; } }
2023-02-07T07:15:35 CrianAchtung an den Rändern
Guest JanNun muss ich aber die folgende (bzw. auch die vorangegangene) Zeile welche als nächstes folgt und den eindeutigen Suchstring 2 enthält auslesen und dann verändert ausgeben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
… … … ziemlich viele Zeilen mit uninteressantem Inhalt …. … … Wort1 Wort2 $string1 # diese Zeile wird verändert wieder ausgegeben … 0 bis 4 Zeilen mit Text … Wort3 Wort4 <2-5stellige Zahl> # die Zahl1 wird noch mehrmals für ausgaben benötigt … … … ziemlich viele Zeilen und dann eine sehr ähnliche Aufgabe nur das diesmal die auszulesende Zeile VOR dem $String1 steht: … Wort5 <anderer String> # dieser string darf nicht ausgelesen werden (steht >1 Stellen von $string1 entfernt) Wort5 <String2> # String2 wird später benötigt (steht vor dem $string1) …. …einige Zeilen … Wort6 Wort7 $string1 # Zeile die den Suchstring $string1 enthält … …Weitere Zeilen… ….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
use 5.028; use warnings; my %found; my @lines; LINE: while (my $line = <DATA>) { push @lines,$line; $line =~ /Wort1 Wort2 (\S+)/ and do { $found{String1} = $1; next LINE; }; $line =~ /Wort3 Wort4 (\d+)/ and do { $found{Zahl1} = $1; next LINE; }; if (exists $found{String1}) { $line =~ /Wort6 Wort7 \Q$found{String1}\E/ and do { BACKWARDS: for my $backwards (reverse @lines) { if ($backwards =~ /Wort5 (.*)/) { $found{String2} = $1; last BACKWARDS; } } }; next LINE; } } say "Gefunden:"; for my $key (sort keys %found) { say " $key = $found{$key}"; } __DATA__ … … … ziemlich viele Zeilen mit uninteressantem Inhalt …. … … Wort1 Wort2 $string1 # diese Zeile wird verändert wieder ausgegeben … 0 bis 4 Zeilen mit Text … Wort3 Wort4 12345 # die Zahl1 wird noch mehrmals für ausgaben benötigt … … … ziemlich viele Zeilen und dann eine sehr ähnliche Aufgabe nur das diesmal die auszulesende Zeile VOR dem $String1 steht: … Wort5 <anderer String> # dieser string darf nicht ausgelesen werden (steht >1 Stellen von $string1 entfernt) Wort5 <String2> # String2 wird später benötigt (steht vor dem $string1) …. …einige Zeilen … Wort6 Wort7 $string1 # Zeile die den Suchstring $string1 enthält … …Weitere Zeilen… ….
1
2
3
4
Gefunden:
String1 = $string1
String2 = <String2> # String2 wird später benötigt (steht vor dem $string1)
Zahl1 = 12345