Hallo zusammen!
habe nur eine kurze (und wahrscheinlich sehr triviale) Frage - habe es aber selber nicht rausgefunden...:
ich möchte eine Textdatei nach einem "MUSTER" durchsuchen.
meine Ausgabe sollte so aussehen:
zeile davor
"MUSTER"
zeile danach
zeile danach
while (<DATEI>) {
print if /$muster/;
}
weiter bin ich nicht gekommen...
kann mir jemand auf die sprünge helfen?
danke schomma.
ingo
danke für die unglaublich schnelle antwort renee!
ich bin aber wohl immer noch zu blöde...habe die Frage aber vielleicht auch falsch gestellt.
ein Beispiel:
Textdatei:
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
usw.....
jetzt möchte ich nach z.b. "ggg" suchen (das bekomme ich soweit schon hin) - aber meine Ausgabe, wenn ich nach "bbb" suche, soll so aussehen:
fff
ggg
hhh
iii
jjj
ich möchte also nach einem Muster suchen, und eine Zeile davor und 3 dahinter als Ergebnis ausgeben.
steckt das in Deiner Lösung schon drin und ich sehs nicht?
tippfehler...sorry
Gast+2007-08-02 21:14:40--jetzt möchte ich nach z.b. "ggg" suchen (das bekomme ich soweit schon hin) - aber meine Ausgabe, wenn ich nach "bbb" suche, soll so aussehen:
muss natürlich "ggg" heissen, anstatt "bbb"
User since
2003-08-14
2022
Artikel
BenutzerIn
Wenn die Datei nicht zu groß ist, kann man sie auch in ein Array "slurpen". Oder
Tie::File verwenden:
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
use strict;
use warnings;
my @lines = <DATA>;
my $last_idx = $#lines;
for (0 .. $last_idx) {
print @lines[$_-1 .. $_+2] if $lines[$_] =~ /ggg/;
}
__DATA__
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
kkk
lll
mmm
@renee bei deinem code verstehe ich die logik nicht - funzt bei mir auch nicht - trotzdem vielen dank.
@ronnie super! vielen dank, genau, was ich gesucht habe.
schönen tag euch noch!
User since
2003-08-04
14371
Artikel
ModeratorIn
Da ist nur ein kleiner Schreibfehler drin, sonst wäre es lauffähig. Ich hatte sowieso überlesen, dass nur die *3* Zeilen nach dem Muster ausgegeben werden sollen...
Ich hoffe, Du verwendest auch
[tt]use strict[/tt]...