| Viewing file:  grep.py (2.13 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
# 'grep'
 import regex
 from regex_syntax import *
 
 opt_show_where = 0
 opt_show_filename = 0
 opt_show_lineno = 1
 
 def grep(pat, *files):
 return ggrep(RE_SYNTAX_GREP, pat, files)
 
 def egrep(pat, *files):
 return ggrep(RE_SYNTAX_EGREP, pat, files)
 
 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)
 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 pgrep(pat, *files):
 if len(files) == 1 and type(files[0]) == type([]):
 files = files[0]
 global opt_show_filename
 opt_show_filename = (len(files) != 1)
 import re
 prog = re.compile(pat)
 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):
 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 = `lineno`.rjust(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
 
 |