import os, sys, getopt
import re
import glob
def get_full_path(path, pattern):
for (dirpath, dirnames, filenames) in os.walk(path):
match = re.search(pattern, dirpath)
for filename in filenames:
if filename.endswith(('.c', '.h')):
yield os.path.join(dirpath, filename)
def read_file(file, pattern):
with open(file, 'r') as outfile:
for line in outfile:
match = re.compile(str(pattern)).match(line)
if match:
print(file + " " + match.group())
def main(argv):
path, f_pattern, s_pattern = '', '', ''
try:
opts, args = getopt.getopt(argv,"hi:p:f:s:",["ifile=","file_pattern=","string_pattern="])
except getopt.GetoptError:
print 'test.py -i <path> -p <pattern>'
sys.exit(2)
for opt, arg in opts:
print(opt, arg)
if opt == '-h':
print 'test.py -i <path>'
sys.exit()
elif opt in ("-i", "--ifile"):
path = arg
elif opt in ("-f", "--file_pattern"):
f_pattern = arg
elif opt in ("-s", "--string_pattern"):
s_pattern = arg.encode().decode('unicode_escape')
print(s_pattern)
files = get_full_path(path, f_pattern)
for file in files:
read_file(file, s_pattern)
if __name__ == "__main__":
main(sys.argv[1:])
aW1wb3J0IG9zLCBzeXMsIGdldG9wdAppbXBvcnQgcmUKaW1wb3J0IGdsb2IKCmRlZiBnZXRfZnVsbF9wYXRoKHBhdGgsIHBhdHRlcm4pOgoJZm9yIChkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzKSBpbiBvcy53YWxrKHBhdGgpOgoJCW1hdGNoID0gcmUuc2VhcmNoKHBhdHRlcm4sIGRpcnBhdGgpCgkJZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKCQkJaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcuYycsICcuaCcpKToKCQkJCXlpZWxkIG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlbmFtZSkJCgpkZWYgcmVhZF9maWxlKGZpbGUsIHBhdHRlcm4pOgoJd2l0aCBvcGVuKGZpbGUsICdyJykgYXMgb3V0ZmlsZToKICAgICAgICAJZm9yIGxpbmUgaW4gb3V0ZmlsZToKCQkJbWF0Y2ggPSByZS5jb21waWxlKHN0cihwYXR0ZXJuKSkubWF0Y2gobGluZSkKCQkJaWYgbWF0Y2g6CgkJCQlwcmludChmaWxlICsgIiAiICsgbWF0Y2guZ3JvdXAoKSkKCQkJCQoKZGVmIG1haW4oYXJndik6CglwYXRoLCBmX3BhdHRlcm4sIHNfcGF0dGVybiA9ICcnLCAnJywgJycKCXRyeToKCSAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3YsImhpOnA6ZjpzOiIsWyJpZmlsZT0iLCJmaWxlX3BhdHRlcm49Iiwic3RyaW5nX3BhdHRlcm49Il0pCglleGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgoJICAgcHJpbnQgJ3Rlc3QucHkgLWkgPHBhdGg+IC1wIDxwYXR0ZXJuPicKCSAgIHN5cy5leGl0KDIpCglmb3Igb3B0LCBhcmcgaW4gb3B0czoKCSAgIHByaW50KG9wdCwgYXJnKQoJICAgaWYgb3B0ID09ICctaCc6CgkgICAgICBwcmludCAndGVzdC5weSAtaSA8cGF0aD4nCgkgICAgICBzeXMuZXhpdCgpCgkgICBlbGlmIG9wdCBpbiAoIi1pIiwgIi0taWZpbGUiKToKCSAgICAgIHBhdGggPSBhcmcKCSAgIGVsaWYgb3B0IGluICgiLWYiLCAiLS1maWxlX3BhdHRlcm4iKToKCSAgICAgIGZfcGF0dGVybiA9IGFyZwoJICAgZWxpZiBvcHQgaW4gKCItcyIsICItLXN0cmluZ19wYXR0ZXJuIik6CgkgICAgICBzX3BhdHRlcm4gPSBhcmcuZW5jb2RlKCkuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpCgkgICAgICBwcmludChzX3BhdHRlcm4pCgkKCWZpbGVzID0gZ2V0X2Z1bGxfcGF0aChwYXRoLCBmX3BhdHRlcm4pCglmb3IgZmlsZSBpbiBmaWxlczoKCQlyZWFkX2ZpbGUoZmlsZSwgc19wYXR0ZXJuKQoJCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CgltYWluKHN5cy5hcmd2WzE6XSkK