39 lines
907 B
Python
39 lines
907 B
Python
#!/usr/bin/env python
|
|
import re
|
|
import fileinput
|
|
import argparse
|
|
from glob import glob # <1>
|
|
from itertools import chain # <2>
|
|
|
|
arg_parser = argparse.ArgumentParser(description="Emulate grep with python") # <3>
|
|
|
|
arg_parser.add_argument(
|
|
'-i',
|
|
dest='ignore_case', action='store_true',
|
|
help='ignore case'
|
|
) # <4>
|
|
|
|
arg_parser.add_argument(
|
|
'pattern', help='Pattern to find (required)'
|
|
) # <5>
|
|
|
|
arg_parser.add_argument(
|
|
'filenames', nargs='*',
|
|
help='filename(s) (if no files specified, read STDIN)'
|
|
) # <6>
|
|
|
|
args = arg_parser.parse_args() # <7>
|
|
|
|
print('-' * 40)
|
|
print(args)
|
|
print('-' * 40)
|
|
|
|
regex = re.compile(args.pattern, re.I if args.ignore_case else 0) # <8>
|
|
|
|
filename_gen = (glob(f) for f in args.filenames) # <9>
|
|
filenames = chain.from_iterable(filename_gen) # <10>
|
|
|
|
for line in fileinput.input(filenames): # <11>
|
|
if regex.search(line):
|
|
print(line.rstrip())
|