2011年5月4日星期三

Grep for Windows - 轉用re

上集加了pipe後,今集再改用Regular expression search。

import sys
import argparse
import glob
import re

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Grep string from text files or PIPE.')
    parser.add_argument('-i', '--ignore', action='store_const', const=re.I, default=0,
                        help='Ignore case (default: case sensitive)')
    parser.add_argument('pattern', help='Pattern')
    parser.add_argument('files', nargs='?', help='Wildcard filename')

    args = parser.parse_args()
    pattern = re.compile(args.pattern, args.ignore)
    if args.files is None:
        while True:
            line = sys.stdin.readline()
            if line:
                if pattern.search(line):
                    print(line.rstrip())
            else:
                sys.exit(0)
    for i in glob.glob(args.files):
        for l, line in enumerate(open(i, 'r')):
            if pattern.search(line):
                print('{}:{} {}'.format(i, l + 1, line.rstrip()))

改用re後,script更加簡潔,唔錯。

沒有留言:

發佈留言