Adapted to new "regex" module.
Introduced egrep() and emgrep() variants. Use '==' for equality test. .,
This commit is contained in:
parent
9f39fbb5b7
commit
5fca8a1b0d
32
Lib/grep.py
32
Lib/grep.py
@ -1,24 +1,36 @@
|
|||||||
# 'grep'
|
# 'grep'
|
||||||
|
|
||||||
import regexp
|
import regex
|
||||||
|
from regex_syntax import *
|
||||||
import string
|
import string
|
||||||
|
|
||||||
def grep(expr, filename):
|
def grep(pat, filename):
|
||||||
match = regexp.compile(expr).match
|
return ggrep(RE_SYNTAX_GREP, pat, filename)
|
||||||
|
|
||||||
|
def egrep(pat, filename):
|
||||||
|
return ggrep(RE_SYNTAX_EGREP, pat, filename)
|
||||||
|
|
||||||
|
def emgrep(pat, filename):
|
||||||
|
return ggrep(RE_SYNTAX_EMACS, pat, filename)
|
||||||
|
|
||||||
|
def ggrep(syntax, pat, filename):
|
||||||
|
syntax = regex.set_syntax(syntax)
|
||||||
|
try:
|
||||||
|
prog = regex.compile(pat)
|
||||||
|
finally:
|
||||||
|
syntax = regex.set_syntax(syntax)
|
||||||
fp = open(filename, 'r')
|
fp = open(filename, 'r')
|
||||||
lineno = 0
|
lineno = 0
|
||||||
while 1:
|
while 1:
|
||||||
line = fp.readline()
|
line = fp.readline()
|
||||||
if not line: break
|
if not line: break
|
||||||
lineno = lineno + 1
|
lineno = lineno + 1
|
||||||
res = match(line)
|
if prog.search(line) >= 0:
|
||||||
if res:
|
if line[-1:] == '\n': line = line[:-1]
|
||||||
#print res
|
|
||||||
start, end = res[0]
|
|
||||||
if line[-1:] = '\n': line = line[:-1]
|
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
print prefix + line
|
print prefix + line
|
||||||
if 0:
|
if 0: # XXX
|
||||||
|
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)
|
||||||
@ -27,6 +39,6 @@ def grep(expr, filename):
|
|||||||
for c in line:
|
for c in line:
|
||||||
if c <> '\t': c = ' '
|
if c <> '\t': c = ' '
|
||||||
prefix = prefix + c
|
prefix = prefix + c
|
||||||
if start = end: prefix = prefix + '\\'
|
if start == end: prefix = prefix + '\\'
|
||||||
else: prefix = prefix + '^'*(end-start)
|
else: prefix = prefix + '^'*(end-start)
|
||||||
print prefix
|
print prefix
|
||||||
|
@ -1,24 +1,36 @@
|
|||||||
# 'grep'
|
# 'grep'
|
||||||
|
|
||||||
import regexp
|
import regex
|
||||||
|
from regex_syntax import *
|
||||||
import string
|
import string
|
||||||
|
|
||||||
def grep(expr, filename):
|
def grep(pat, filename):
|
||||||
match = regexp.compile(expr).match
|
return ggrep(RE_SYNTAX_GREP, pat, filename)
|
||||||
|
|
||||||
|
def egrep(pat, filename):
|
||||||
|
return ggrep(RE_SYNTAX_EGREP, pat, filename)
|
||||||
|
|
||||||
|
def emgrep(pat, filename):
|
||||||
|
return ggrep(RE_SYNTAX_EMACS, pat, filename)
|
||||||
|
|
||||||
|
def ggrep(syntax, pat, filename):
|
||||||
|
syntax = regex.set_syntax(syntax)
|
||||||
|
try:
|
||||||
|
prog = regex.compile(pat)
|
||||||
|
finally:
|
||||||
|
syntax = regex.set_syntax(syntax)
|
||||||
fp = open(filename, 'r')
|
fp = open(filename, 'r')
|
||||||
lineno = 0
|
lineno = 0
|
||||||
while 1:
|
while 1:
|
||||||
line = fp.readline()
|
line = fp.readline()
|
||||||
if not line: break
|
if not line: break
|
||||||
lineno = lineno + 1
|
lineno = lineno + 1
|
||||||
res = match(line)
|
if prog.search(line) >= 0:
|
||||||
if res:
|
if line[-1:] == '\n': line = line[:-1]
|
||||||
#print res
|
|
||||||
start, end = res[0]
|
|
||||||
if line[-1:] = '\n': line = line[:-1]
|
|
||||||
prefix = string.rjust(`lineno`, 3) + ': '
|
prefix = string.rjust(`lineno`, 3) + ': '
|
||||||
print prefix + line
|
print prefix + line
|
||||||
if 0:
|
if 0: # XXX
|
||||||
|
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)
|
||||||
@ -27,6 +39,6 @@ def grep(expr, filename):
|
|||||||
for c in line:
|
for c in line:
|
||||||
if c <> '\t': c = ' '
|
if c <> '\t': c = ' '
|
||||||
prefix = prefix + c
|
prefix = prefix + c
|
||||||
if start = end: prefix = prefix + '\\'
|
if start == end: prefix = prefix + '\\'
|
||||||
else: prefix = prefix + '^'*(end-start)
|
else: prefix = prefix + '^'*(end-start)
|
||||||
print prefix
|
print prefix
|
||||||
|
Loading…
x
Reference in New Issue
Block a user