Guido van Rossum | 217a5fa | 1990-12-26 15:40:07 +0000 | [diff] [blame] | 1 | # 'grep' |
| 2 | |
Guido van Rossum | 5fca8a1 | 1991-12-31 00:00:35 +0000 | [diff] [blame] | 3 | import regex |
| 4 | from regex_syntax import * |
Guido van Rossum | 217a5fa | 1990-12-26 15:40:07 +0000 | [diff] [blame] | 5 | |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 6 | opt_show_where = 0 |
| 7 | opt_show_filename = 0 |
| 8 | opt_show_lineno = 1 |
Guido van Rossum | 5fca8a1 | 1991-12-31 00:00:35 +0000 | [diff] [blame] | 9 | |
Guido van Rossum | 6a1f089 | 1992-04-06 14:03:53 +0000 | [diff] [blame] | 10 | def grep(pat, *files): |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 11 | return ggrep(RE_SYNTAX_GREP, pat, files) |
Guido van Rossum | 5fca8a1 | 1991-12-31 00:00:35 +0000 | [diff] [blame] | 12 | |
Guido van Rossum | 6a1f089 | 1992-04-06 14:03:53 +0000 | [diff] [blame] | 13 | def egrep(pat, *files): |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 14 | return ggrep(RE_SYNTAX_EGREP, pat, files) |
Guido van Rossum | 5fca8a1 | 1991-12-31 00:00:35 +0000 | [diff] [blame] | 15 | |
Guido van Rossum | 6a1f089 | 1992-04-06 14:03:53 +0000 | [diff] [blame] | 16 | def emgrep(pat, *files): |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 17 | return ggrep(RE_SYNTAX_EMACS, pat, files) |
| 18 | |
| 19 | def ggrep(syntax, pat, files): |
| 20 | if len(files) == 1 and type(files[0]) == type([]): |
| 21 | files = files[0] |
| 22 | global opt_show_filename |
| 23 | opt_show_filename = (len(files) != 1) |
Guido van Rossum | 5fca8a1 | 1991-12-31 00:00:35 +0000 | [diff] [blame] | 24 | syntax = regex.set_syntax(syntax) |
| 25 | try: |
| 26 | prog = regex.compile(pat) |
| 27 | finally: |
| 28 | syntax = regex.set_syntax(syntax) |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 29 | for filename in files: |
| 30 | fp = open(filename, 'r') |
| 31 | lineno = 0 |
| 32 | while 1: |
| 33 | line = fp.readline() |
| 34 | if not line: break |
| 35 | lineno = lineno + 1 |
| 36 | if prog.search(line) >= 0: |
| 37 | showline(filename, lineno, line, prog) |
| 38 | fp.close() |
| 39 | |
Guido van Rossum | 8566e47 | 1997-10-22 20:44:58 +0000 | [diff] [blame] | 40 | def pgrep(pat, *files): |
| 41 | if len(files) == 1 and type(files[0]) == type([]): |
| 42 | files = files[0] |
| 43 | global opt_show_filename |
| 44 | opt_show_filename = (len(files) != 1) |
| 45 | import re |
| 46 | prog = re.compile(pat) |
| 47 | for filename in files: |
| 48 | fp = open(filename, 'r') |
| 49 | lineno = 0 |
| 50 | while 1: |
| 51 | line = fp.readline() |
| 52 | if not line: break |
| 53 | lineno = lineno + 1 |
| 54 | if prog.search(line): |
| 55 | showline(filename, lineno, line, prog) |
| 56 | fp.close() |
| 57 | |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 58 | def showline(filename, lineno, line, prog): |
| 59 | if line[-1:] == '\n': line = line[:-1] |
| 60 | if opt_show_lineno: |
Sjoerd Mullender | 62f1a23 | 2001-02-09 16:34:24 +0000 | [diff] [blame^] | 61 | prefix = `lineno`.rjust(3) + ': ' |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 62 | else: |
| 63 | prefix = '' |
| 64 | if opt_show_filename: |
| 65 | prefix = filename + ': ' + prefix |
| 66 | print prefix + line |
| 67 | if opt_show_where: |
| 68 | start, end = prog.regs()[0] |
| 69 | line = line[:start] |
| 70 | if '\t' not in line: |
| 71 | prefix = ' ' * (len(prefix) + start) |
| 72 | else: |
| 73 | prefix = ' ' * len(prefix) |
| 74 | for c in line: |
Fred Drake | 132dce2 | 2000-12-12 23:11:42 +0000 | [diff] [blame] | 75 | if c != '\t': c = ' ' |
Guido van Rossum | e9cde31 | 1992-01-12 23:33:52 +0000 | [diff] [blame] | 76 | prefix = prefix + c |
| 77 | if start == end: prefix = prefix + '\\' |
| 78 | else: prefix = prefix + '^'*(end-start) |
| 79 | print prefix |