Wie 'grep -A' umsetzen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
McRib
User
Beiträge: 9
Registriert: Sonntag 1. Juli 2007, 17:31

Wie 'grep -A' umsetzen ?

Beitragvon McRib » Donnerstag 19. Juli 2007, 10:43

grep -A [num] gibt die naechsten [num] Zeilen nach dem match aus.

Code: Alles auswählen

output = os.popen(command).read()
p = re.compile(pattern)
r=p.search(output)


r.group() gibt mir nur das match, wie komme ich an die naechsten [num] Zeilen ???
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 19. Juli 2007, 10:48

Schau dir mal die Funktion "re.split" an. Damit kannst du die Eingabe teilen und musst nur noch die "rechte" Seite des Ergebnisses in Zeilen aufteilen.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Beitragvon lutz.horn » Donnerstag 19. Juli 2007, 11:02

Code: Alles auswählen

output = 'foo\nbar\nbaz\nqux'
o = output.split()
for row in o:
    if row == "bar": # oder Regulären Ausdruck matchen
        print o[o.index(row):2]
https://www.xing.com/go/invite/18513630.6a91d4
BlackJack

Beitragvon BlackJack » Donnerstag 19. Juli 2007, 11:23

Funktioniert so nicht, falls 'bar' mehrfach vorkommt. Und statt in einer ``for``-Schleife nach 'bar' zu suchen um dann im Erfolgsfall mit `index()` auch nach 'bar' zu suchen, also genau das zu machen, was die ``for``-Schleife eben schon einmal getan hat…
BlackJack

Beitragvon BlackJack » Donnerstag 19. Juli 2007, 11:30

So könnte man das machen:

Code: Alles auswählen

from __future__ import with_statement
import re

def grep_a(regex, lines, count=1):
    lines_left = 0
    for line in lines:
        if regex.search(line):
            lines_left = count
        if lines_left:
            yield line
            lines_left -= 1

def main():
    with open('test.py', 'r') as lines:
        for line in grep_a(re.compile('^def '), lines, 3):
            print line,
McRib
User
Beiträge: 9
Registriert: Sonntag 1. Juli 2007, 17:31

Beitragvon McRib » Donnerstag 19. Juli 2007, 12:07

viele antworten in so kurzer Zeit :-D Scheint wohl der Donnerstagmittag-Brainteaser zu sein...

Mal angenommen ich wuerde statt der Schleifen das Pattern um die nachsten 4 Zeilen erweitern, wuerde das funktionieren ?

Irgendwie funktioniert der Einsatz von ^ und $ nicht gemaess meinen Erwartungen :-(

Edit: habs jetzt - Danke fuer die Tips...

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], Bing [Bot]