Mercurial > cpython-lru_cache-weakref
view Tools/scripts/rgrep.py @ 58525:d4e22fd528e2 3.1
Merged revisions 77781-77782 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r77781 | benjamin.peterson | 2010-01-26 19:47:14 -0600 (Tue, 26 Jan 2010) | 1 line
don't accept bytes in FileIO.write #7785
........
r77782 | benjamin.peterson | 2010-01-26 19:51:29 -0600 (Tue, 26 Jan 2010) | 1 line
add issue number
........
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Wed, 27 Jan 2010 01:56:08 +0000 |
| parents | 46625e6122e9 |
| children | fcfe324663a6 |
line wrap: on
line source
#! /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()
