]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Now uses varargs syntax to grep more than one file.
authorGuido van Rossum <guido@python.org>
Sun, 12 Jan 1992 23:33:52 +0000 (23:33 +0000)
committerGuido van Rossum <guido@python.org>
Sun, 12 Jan 1992 23:33:52 +0000 (23:33 +0000)
Lib/grep.py
Lib/lib-old/grep.py

index 21ef8d80171aa20f77cf0b3a0e0e149c69125ce8..019d91646fcd57786f5cfff4f2552f93d6399524 100644 (file)
@@ -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
index 21ef8d80171aa20f77cf0b3a0e0e149c69125ce8..019d91646fcd57786f5cfff4f2552f93d6399524 100644 (file)
@@ -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