Seite 1 von 1

Wie 'grep -A' umsetzen ?

Verfasst: Donnerstag 19. Juli 2007, 10:43
von McRib
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 ???

Verfasst: Donnerstag 19. Juli 2007, 10:48
von EyDu
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.

Verfasst: Donnerstag 19. Juli 2007, 11:02
von lutz.horn

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]

Verfasst: Donnerstag 19. Juli 2007, 11:23
von BlackJack
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…

Verfasst: Donnerstag 19. Juli 2007, 11:30
von BlackJack
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,

Verfasst: Donnerstag 19. Juli 2007, 12:07
von McRib
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...