mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Now uses varargs syntax to grep more than one file.
This commit is contained in:
parent
b914257366
commit
e9cde31c47
2 changed files with 96 additions and 60 deletions
36
Lib/grep.py
36
Lib/grep.py
|
@ -4,21 +4,30 @@ 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)
|
||||||
|
for filename in files:
|
||||||
fp = open(filename, 'r')
|
fp = open(filename, 'r')
|
||||||
lineno = 0
|
lineno = 0
|
||||||
while 1:
|
while 1:
|
||||||
|
@ -26,11 +35,20 @@ def ggrep(syntax, pat, filename):
|
||||||
if not line: break
|
if not line: break
|
||||||
lineno = lineno + 1
|
lineno = lineno + 1
|
||||||
if prog.search(line) >= 0:
|
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 line[-1:] == '\n': line = line[:-1]
|
||||||
|
if opt_show_lineno:
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
|
else:
|
||||||
|
prefix = ''
|
||||||
|
if opt_show_filename:
|
||||||
|
prefix = filename + ': ' + prefix
|
||||||
print prefix + line
|
print prefix + line
|
||||||
if 0: # XXX
|
if opt_show_where:
|
||||||
start, end = prog.regs[0]
|
start, end = prog.regs()[0]
|
||||||
line = line[:start]
|
line = line[:start]
|
||||||
if '\t' not in line:
|
if '\t' not in line:
|
||||||
prefix = ' ' * (len(prefix) + start)
|
prefix = ' ' * (len(prefix) + start)
|
||||||
|
|
|
@ -4,21 +4,30 @@ 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)
|
||||||
|
for filename in files:
|
||||||
fp = open(filename, 'r')
|
fp = open(filename, 'r')
|
||||||
lineno = 0
|
lineno = 0
|
||||||
while 1:
|
while 1:
|
||||||
|
@ -26,11 +35,20 @@ def ggrep(syntax, pat, filename):
|
||||||
if not line: break
|
if not line: break
|
||||||
lineno = lineno + 1
|
lineno = lineno + 1
|
||||||
if prog.search(line) >= 0:
|
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 line[-1:] == '\n': line = line[:-1]
|
||||||
|
if opt_show_lineno:
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
|
else:
|
||||||
|
prefix = ''
|
||||||
|
if opt_show_filename:
|
||||||
|
prefix = filename + ': ' + prefix
|
||||||
print prefix + line
|
print prefix + line
|
||||||
if 0: # XXX
|
if opt_show_where:
|
||||||
start, end = prog.regs[0]
|
start, end = prog.regs()[0]
|
||||||
line = line[:start]
|
line = line[:start]
|
||||||
if '\t' not in line:
|
if '\t' not in line:
|
||||||
prefix = ' ' * (len(prefix) + start)
|
prefix = ' ' * (len(prefix) + start)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue