summaryrefslogtreecommitdiffstats
path: root/Lib/grep.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-01-12 23:33:52 (GMT)
committerGuido van Rossum <guido@python.org>1992-01-12 23:33:52 (GMT)
commite9cde31c475d2838a0bed107ed285ad594293352 (patch)
tree6aad7d3ae87df0a897ec84a515ee3d1d52bc6963 /Lib/grep.py
parentb9142573668627e225425a8bc1202c952acca23c (diff)
downloadcpython-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.py78
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