Staging
v0.5.1
v0.5.1
https://github.com/python/cpython
Revision c08cae9fa1b6241a192e0c878877914b000d6ce3 authored by Ezio Melotti on 28 February 2010, 03:48:50 UTC, committed by Ezio Melotti on 28 February 2010, 03:48:50 UTC
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r78513 | ezio.melotti | 2010-02-28 05:46:13 +0200 (Sun, 28 Feb 2010) | 9 lines Merged revisions 78511 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78511 | ezio.melotti | 2010-02-28 05:11:07 +0200 (Sun, 28 Feb 2010) | 1 line Pep8ify test names in the examples. ........ ................
1 parent 1ca73ed
Tip revision: c08cae9fa1b6241a192e0c878877914b000d6ce3 authored by Ezio Melotti on 28 February 2010, 03:48:50 UTC
Merged revisions 78513 via svnmerge from
Merged revisions 78513 via svnmerge from
Tip revision: c08cae9
rgrep.py
#! /usr/bin/env python
"""Reverse grep.
Usage: rgrep [-i] pattern file
"""
import sys
import re
import getopt
def main():
bufsize = 64*1024
reflags = 0
opts, args = getopt.getopt(sys.argv[1:], "i")
for o, a in opts:
if o == '-i':
reflags = reflags | re.IGNORECASE
if len(args) < 2:
usage("not enough arguments")
if len(args) > 2:
usage("exactly one file argument required")
pattern, filename = args
try:
prog = re.compile(pattern, reflags)
except re.error as msg:
usage("error in regular expression: %s" % str(msg))
try:
f = open(filename)
except IOError as msg:
usage("can't open %s: %s" % (repr(filename), str(msg)), 1)
f.seek(0, 2)
pos = f.tell()
leftover = None
while pos > 0:
size = min(pos, bufsize)
pos = pos - size
f.seek(pos)
buffer = f.read(size)
lines = buffer.split("\n")
del buffer
if leftover is None:
if not lines[-1]:
del lines[-1]
else:
lines[-1] = lines[-1] + leftover
if pos > 0:
leftover = lines[0]
del lines[0]
else:
leftover = None
lines.reverse()
for line in lines:
if prog.search(line):
print(line)
def usage(msg, code=2):
sys.stdout = sys.stderr
print(msg)
print(__doc__)
sys.exit(code)
if __name__ == '__main__':
main()
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...