summaryrefslogtreecommitdiffstats
path: root/Lib/grep.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/grep.py')
-rw-r--r--Lib/grep.py32
1 files changed, 22 insertions, 10 deletions
diff --git a/Lib/grep.py b/Lib/grep.py
index 767498b..bfee3f5 100644
--- a/Lib/grep.py
+++ b/Lib/grep.py
@@ -1,24 +1,36 @@
# 'grep'
-import regexp
+import regex
+from regex_syntax import *
import string
-def grep(expr, filename):
- match = regexp.compile(expr).match
+def grep(pat, filename):
+ 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')
lineno = 0
while 1:
line = fp.readline()
if not line: break
lineno = lineno + 1
- res = match(line)
- if res:
- #print res
- start, end = res[0]
- if line[-1:] = '\n': line = line[:-1]
+ if prog.search(line) >= 0:
+ if line[-1:] == '\n': line = line[:-1]
prefix = string.rjust(`lineno`, 3) + ': '
print prefix + line
- if 0:
+ if 0: # XXX
+ start, end = prog.regs()[0]
line = line[:start]
if '\t' not in line:
prefix = ' ' * (len(prefix) + start)
@@ -27,6 +39,6 @@ def grep(expr, filename):
for c in line:
if c <> '\t': c = ' '
prefix = prefix + c
- if start = end: prefix = prefix + '\\'
+ if start == end: prefix = prefix + '\\'
else: prefix = prefix + '^'*(end-start)
print prefix