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 *
|
from regex_syntax import *
|
||||||
import string
|
import string
|
||||||
|
|
||||||
def grep(pat, filename):
|
opt_show_where = 0
|
||||||
return ggrep(RE_SYNTAX_GREP, pat, filename)
|
opt_show_filename = 0
|
||||||
|
opt_show_lineno = 1
|
||||||
|
|
||||||
def egrep(pat, filename):
|
def grep(pat, +files):
|
||||||
return ggrep(RE_SYNTAX_EGREP, pat, filename)
|
return ggrep(RE_SYNTAX_GREP, pat, files)
|
||||||
|
|
||||||
def emgrep(pat, filename):
|
def egrep(pat, +files):
|
||||||
return ggrep(RE_SYNTAX_EMACS, pat, filename)
|
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)
|
syntax = regex.set_syntax(syntax)
|
||||||
try:
|
try:
|
||||||
prog = regex.compile(pat)
|
prog = regex.compile(pat)
|
||||||
finally:
|
finally:
|
||||||
syntax = regex.set_syntax(syntax)
|
syntax = regex.set_syntax(syntax)
|
||||||
fp = open(filename, 'r')
|
for filename in files:
|
||||||
lineno = 0
|
fp = open(filename, 'r')
|
||||||
while 1:
|
lineno = 0
|
||||||
line = fp.readline()
|
while 1:
|
||||||
if not line: break
|
line = fp.readline()
|
||||||
lineno = lineno + 1
|
if not line: break
|
||||||
if prog.search(line) >= 0:
|
lineno = lineno + 1
|
||||||
if line[-1:] == '\n': line = line[:-1]
|
if prog.search(line) >= 0:
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
showline(filename, lineno, line, prog)
|
||||||
print prefix + line
|
fp.close()
|
||||||
if 0: # XXX
|
|
||||||
start, end = prog.regs[0]
|
def showline(filename, lineno, line, prog):
|
||||||
line = line[:start]
|
if line[-1:] == '\n': line = line[:-1]
|
||||||
if '\t' not in line:
|
if opt_show_lineno:
|
||||||
prefix = ' ' * (len(prefix) + start)
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
else:
|
else:
|
||||||
prefix = ' ' * len(prefix)
|
prefix = ''
|
||||||
for c in line:
|
if opt_show_filename:
|
||||||
if c <> '\t': c = ' '
|
prefix = filename + ': ' + prefix
|
||||||
prefix = prefix + c
|
print prefix + line
|
||||||
if start == end: prefix = prefix + '\\'
|
if opt_show_where:
|
||||||
else: prefix = prefix + '^'*(end-start)
|
start, end = prog.regs()[0]
|
||||||
print prefix
|
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 *
|
from regex_syntax import *
|
||||||
import string
|
import string
|
||||||
|
|
||||||
def grep(pat, filename):
|
opt_show_where = 0
|
||||||
return ggrep(RE_SYNTAX_GREP, pat, filename)
|
opt_show_filename = 0
|
||||||
|
opt_show_lineno = 1
|
||||||
|
|
||||||
def egrep(pat, filename):
|
def grep(pat, +files):
|
||||||
return ggrep(RE_SYNTAX_EGREP, pat, filename)
|
return ggrep(RE_SYNTAX_GREP, pat, files)
|
||||||
|
|
||||||
def emgrep(pat, filename):
|
def egrep(pat, +files):
|
||||||
return ggrep(RE_SYNTAX_EMACS, pat, filename)
|
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)
|
syntax = regex.set_syntax(syntax)
|
||||||
try:
|
try:
|
||||||
prog = regex.compile(pat)
|
prog = regex.compile(pat)
|
||||||
finally:
|
finally:
|
||||||
syntax = regex.set_syntax(syntax)
|
syntax = regex.set_syntax(syntax)
|
||||||
fp = open(filename, 'r')
|
for filename in files:
|
||||||
lineno = 0
|
fp = open(filename, 'r')
|
||||||
while 1:
|
lineno = 0
|
||||||
line = fp.readline()
|
while 1:
|
||||||
if not line: break
|
line = fp.readline()
|
||||||
lineno = lineno + 1
|
if not line: break
|
||||||
if prog.search(line) >= 0:
|
lineno = lineno + 1
|
||||||
if line[-1:] == '\n': line = line[:-1]
|
if prog.search(line) >= 0:
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
showline(filename, lineno, line, prog)
|
||||||
print prefix + line
|
fp.close()
|
||||||
if 0: # XXX
|
|
||||||
start, end = prog.regs[0]
|
def showline(filename, lineno, line, prog):
|
||||||
line = line[:start]
|
if line[-1:] == '\n': line = line[:-1]
|
||||||
if '\t' not in line:
|
if opt_show_lineno:
|
||||||
prefix = ' ' * (len(prefix) + start)
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
else:
|
else:
|
||||||
prefix = ' ' * len(prefix)
|
prefix = ''
|
||||||
for c in line:
|
if opt_show_filename:
|
||||||
if c <> '\t': c = ' '
|
prefix = filename + ': ' + prefix
|
||||||
prefix = prefix + c
|
print prefix + line
|
||||||
if start == end: prefix = prefix + '\\'
|
if opt_show_where:
|
||||||
else: prefix = prefix + '^'*(end-start)
|
start, end = prog.regs()[0]
|
||||||
print prefix
|
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