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
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...