grep一个单词,如果发现之前打印10行,模式匹配后打印10行

Row*_*law 3 python grep

我正在处理一个巨大的文件.我想在行中搜索一个单词,当找到时我应该在模式匹配之前打印10行和10行.我怎么能在Python中做到这一点?

fal*_*tru 7

import collections
import itertools
import sys

with open('huge-file') as f:
    before = collections.deque(maxlen=10)
    for line in f:
        if 'word' in line:
            sys.stdout.writelines(before)
            sys.stdout.write(line)
            sys.stdout.writelines(itertools.islice(f, 10))
            break
        before.append(line)
Run Code Online (Sandbox Code Playgroud)

用于collections.deque在比赛前保存最多10行,并在比赛itertools.islice后获得接下来的10行.


更新要使用ip/mac地址排除行:

import collections
import itertools
import re  # <---
import sys

addr_pattern = re.compile(
    r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|'
    r'\b[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}\b',
    flags=re.IGNORECASE
)  # <--

with open('huge-file') as f:
    before = collections.deque(maxlen=10)
    for line in f:
        if addr_pattern.search(line):  # <---
            continue                   # <---
        if 'word' in line:
            sys.stdout.writelines(before)
            sys.stdout.write(line)
            sys.stdout.writelines(itertools.islice(f, 10))
            break
        before.append(line)
Run Code Online (Sandbox Code Playgroud)