複数のファイルで複数の正規表現を「grep」したい。これらすべての正規表現をファイル (1 行に 1 つ) に格納し、次の方法でロードして、「スーパー正規表現」を構築します。
dic = open('regex.dic')
rex = []
for l in iter(dic):
if not l.startswith('#'):
rex.append('^.*%s.*$' % l.strip())
rex = '|'.join(rex)
debug('rex='+rex)
global regex
regex = re.compile(rex, re.IGNORECASE|re.MULTILINE)
dic.close()
次に、次のようにファイルをチェックします。
with open(fn, 'r') as f: data = f.readlines()
for i, line in enumerate(data):
if len(line) <= 512: #Sanity check
if regex.search(line):
if not alreadyFound:
log( "[!]Found in %s:" % fn)
alreadyFound = True
found = True
copyFile(fn)
log("\t%s" % '\t'.join(data[i-args.context:i+args.context+1]).strip())
これは機能します。これは実際には効率的で危険ではないと思います(ディックの一部の正規表現は「スーパー正規表現」を壊す可能性があります)。正規表現配列でループすることを考えていましたが、それは各ファイルを複数回スキャンすることを意味します:/
これを行う方法についての素晴らしいアイデアはありますか? ありがとう!