Now uses varargs syntax to grep more than one file.
This commit is contained in:
parent
b914257366
commit
e9cde31c47
78
Lib/grep.py
78
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue