import argparse
def remove_lines_from_keyword(filename, keywords, before, after):
with open(filename, "r") as f:
lines = f.readlines()
display_flags = [True] * len(lines)
for i, line in enumerate(lines):
if any(keyword in line for keyword in keywords):
from_ = max(0, i - before)
to_ = min(len(lines), i + after + 1)
display_flags[from_:to_] = [False] * (to_ - from_)
for line, display_flag in zip(lines, display_flags):
if display_flag:
print(line, end="")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-B", "--before-context", type=int, default=0)
parser.add_argument("-A", "--after-context", type=int, default=0)
parser.add_argument("filename")
parser.add_argument("keyword", nargs="*")
args = parser.parse_args()
remove_lines_from_keyword(
args.filename, args.keyword, args.before_context, args.after_context
)
if __name__ == "__main__":
main()
aW1wb3J0IGFyZ3BhcnNlCgoKZGVmIHJlbW92ZV9saW5lc19mcm9tX2tleXdvcmQoZmlsZW5hbWUsIGtleXdvcmRzLCBiZWZvcmUsIGFmdGVyKToKICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQoKICAgIGRpc3BsYXlfZmxhZ3MgPSBbVHJ1ZV0gKiBsZW4obGluZXMpCiAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgogICAgICAgIGlmIGFueShrZXl3b3JkIGluIGxpbmUgZm9yIGtleXdvcmQgaW4ga2V5d29yZHMpOgogICAgICAgICAgICBmcm9tXyA9IG1heCgwLCBpIC0gYmVmb3JlKQogICAgICAgICAgICB0b18gPSBtaW4obGVuKGxpbmVzKSwgaSArIGFmdGVyICsgMSkKICAgICAgICAgICAgZGlzcGxheV9mbGFnc1tmcm9tXzp0b19dID0gW0ZhbHNlXSAqICh0b18gLSBmcm9tXykKCiAgICBmb3IgbGluZSwgZGlzcGxheV9mbGFnIGluIHppcChsaW5lcywgZGlzcGxheV9mbGFncyk6CiAgICAgICAgaWYgZGlzcGxheV9mbGFnOgogICAgICAgICAgICBwcmludChsaW5lLCBlbmQ9IiIpCgoKZGVmIG1haW4oKToKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1CIiwgIi0tYmVmb3JlLWNvbnRleHQiLCB0eXBlPWludCwgZGVmYXVsdD0wKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUEiLCAiLS1hZnRlci1jb250ZXh0IiwgdHlwZT1pbnQsIGRlZmF1bHQ9MCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoImZpbGVuYW1lIikKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoImtleXdvcmQiLCBuYXJncz0iKiIpCiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgcmVtb3ZlX2xpbmVzX2Zyb21fa2V5d29yZCgKICAgICAgICBhcmdzLmZpbGVuYW1lLCBhcmdzLmtleXdvcmQsIGFyZ3MuYmVmb3JlX2NvbnRleHQsIGFyZ3MuYWZ0ZXJfY29udGV4dAogICAgKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkK