| # 'grep' |
| |
| import regexp |
| import string |
| |
| def grep(expr, filename): |
| match = regexp.compile(expr).match |
| 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] |
| prefix = string.rjust(`lineno`, 3) + ': ' |
| print prefix + line |
| if 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 |