diff options
Diffstat (limited to 'Tools/scripts/rgrep.py')
-rwxr-xr-x | Tools/scripts/rgrep.py | 67 |
1 files changed, 32 insertions, 35 deletions
diff --git a/Tools/scripts/rgrep.py b/Tools/scripts/rgrep.py index c39bf93..b644206 100755 --- a/Tools/scripts/rgrep.py +++ b/Tools/scripts/rgrep.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#! /usr/bin/env python """Reverse grep. @@ -9,9 +9,8 @@ import sys import re import getopt - def main(): - bufsize = 64 * 1024 + bufsize = 64*1024 reflags = 0 opts, args = getopt.getopt(sys.argv[1:], "i") for o, a in opts: @@ -24,44 +23,42 @@ def main(): pattern, filename = args try: prog = re.compile(pattern, reflags) - except re.error as msg: - usage("error in regular expression: %s" % msg) + except re.error, msg: + usage("error in regular expression: %s" % str(msg)) try: f = open(filename) - except IOError as msg: - usage("can't open %r: %s" % (filename, msg), 1) - with f: - 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 - for line in reversed(lines): - if prog.search(line): - print(line) - + except IOError, 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__) + print msg + print __doc__ sys.exit(code) - if __name__ == '__main__': main() |