diff options
Diffstat (limited to 'Lib/grep.py')
-rw-r--r-- | Lib/grep.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/Lib/grep.py b/Lib/grep.py index 767498b..bfee3f5 100644 --- a/Lib/grep.py +++ b/Lib/grep.py @@ -1,24 +1,36 @@ # 'grep' -import regexp +import regex +from regex_syntax import * import string -def grep(expr, filename): - match = regexp.compile(expr).match +def grep(pat, filename): + return ggrep(RE_SYNTAX_GREP, pat, filename) + +def egrep(pat, filename): + return ggrep(RE_SYNTAX_EGREP, pat, filename) + +def emgrep(pat, filename): + return ggrep(RE_SYNTAX_EMACS, pat, filename) + +def ggrep(syntax, pat, filename): + 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 - res = match(line) - if res: - #print res - start, end = res[0] - if line[-1:] = '\n': line = line[:-1] + if prog.search(line) >= 0: + if line[-1:] == '\n': line = line[:-1] prefix = string.rjust(`lineno`, 3) + ': ' print prefix + line - if 0: + if 0: # XXX + start, end = prog.regs()[0] line = line[:start] if '\t' not in line: prefix = ' ' * (len(prefix) + start) @@ -27,6 +39,6 @@ def grep(expr, filename): for c in line: if c <> '\t': c = ' ' prefix = prefix + c - if start = end: prefix = prefix + '\\' + if start == end: prefix = prefix + '\\' else: prefix = prefix + '^'*(end-start) print prefix |