diff options
author | Guido van Rossum <guido@python.org> | 1992-01-12 23:33:52 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-01-12 23:33:52 (GMT) |
commit | e9cde31c475d2838a0bed107ed285ad594293352 (patch) | |
tree | 6aad7d3ae87df0a897ec84a515ee3d1d52bc6963 /Lib/grep.py | |
parent | b9142573668627e225425a8bc1202c952acca23c (diff) | |
download | cpython-e9cde31c475d2838a0bed107ed285ad594293352.zip cpython-e9cde31c475d2838a0bed107ed285ad594293352.tar.gz cpython-e9cde31c475d2838a0bed107ed285ad594293352.tar.bz2 |
Now uses varargs syntax to grep more than one file.
Diffstat (limited to 'Lib/grep.py')
-rw-r--r-- | Lib/grep.py | 78 |
1 files changed, 48 insertions, 30 deletions
diff --git a/Lib/grep.py b/Lib/grep.py index 21ef8d8..019d916 100644 --- a/Lib/grep.py +++ b/Lib/grep.py @@ -4,41 +4,59 @@ import regex from regex_syntax import * import string -def grep(pat, filename): - return ggrep(RE_SYNTAX_GREP, pat, filename) +opt_show_where = 0 +opt_show_filename = 0 +opt_show_lineno = 1 -def egrep(pat, filename): - return ggrep(RE_SYNTAX_EGREP, pat, filename) +def grep(pat, +files): + return ggrep(RE_SYNTAX_GREP, pat, files) -def emgrep(pat, filename): - return ggrep(RE_SYNTAX_EMACS, pat, filename) +def egrep(pat, +files): + return ggrep(RE_SYNTAX_EGREP, pat, files) -def ggrep(syntax, pat, filename): +def emgrep(pat, +files): + return ggrep(RE_SYNTAX_EMACS, pat, files) + +def ggrep(syntax, pat, files): + if len(files) == 1 and type(files[0]) == type([]): + files = files[0] + global opt_show_filename + opt_show_filename = (len(files) != 1) syntax = regex.set_syntax(syntax) try: prog = regex.compile(pat) finally: syntax = regex.set_syntax(syntax) - fp = open(filename, 'r') - lineno = 0 - while 1: - line = fp.readline() - if not line: break - lineno = lineno + 1 - if prog.search(line) >= 0: - if line[-1:] == '\n': line = line[:-1] - prefix = string.rjust(`lineno`, 3) + ': ' - print prefix + line - if 0: # XXX - start, end = prog.regs[0] - line = line[:start] - if '\t' not in line: - prefix = ' ' * (len(prefix) + start) - else: - prefix = ' ' * len(prefix) - for c in line: - if c <> '\t': c = ' ' - prefix = prefix + c - if start == end: prefix = prefix + '\\' - else: prefix = prefix + '^'*(end-start) - print prefix + for filename in files: + fp = open(filename, 'r') + lineno = 0 + while 1: + line = fp.readline() + if not line: break + lineno = lineno + 1 + if prog.search(line) >= 0: + showline(filename, lineno, line, prog) + fp.close() + +def showline(filename, lineno, line, prog): + if line[-1:] == '\n': line = line[:-1] + if opt_show_lineno: + prefix = string.rjust(`lineno`, 3) + ': ' + else: + prefix = '' + if opt_show_filename: + prefix = filename + ': ' + prefix + print prefix + line + if opt_show_where: + start, end = prog.regs()[0] + line = line[:start] + if '\t' not in line: + prefix = ' ' * (len(prefix) + start) + else: + prefix = ' ' * len(prefix) + for c in line: + if c <> '\t': c = ' ' + prefix = prefix + c + if start == end: prefix = prefix + '\\' + else: prefix = prefix + '^'*(end-start) + print prefix |