【发布时间】:2020-10-15 20:43:43
【问题描述】:
我在使用 grep -B 10 -A 10 获取关键字 + 上下文行时遇到了意外问题。如果在该上下文中存在匹配,则它不会将其视为单独的匹配,而是扩展了上下文。之前遇到过这个问题:Do not merge the context of contiguous matches with grep
因此,当从以下位置查找匹配项时:
a
b
match1
c
d
e
match2
f
match3
g
h
i
j
我想得到(使用任何分隔符)。这里的示例是 N=2 在任一方向,但我想要一个易于调整数字的通用解决方案。
b
match1
c
d
--
d
e
match2
f
match3
--
match2
f
match3
g
h
--
有一个小python脚本作为答案编写,但考虑到现在已经9年了,也许有更好的方法。我正在处理大文件(100M+ 行),所以 python 脚本并不能真正完成这项工作。
也许有一些新的或旧的命令行工具可以做到这一点?
【问题讨论】:
-
10 行就好了 ;)
-
我建议您更改问题中的样本以反映这一点,这样做将为希望回答的人提供一种简单的测试方法。还有一个问题是您是否可以有多个重叠在这 10 行中,或者重叠限制为最多一个匹配
-
啊,谢谢,在这种情况下,我确实想要一个通用的解决方案。我编辑了文本。多个重叠是可能的。只是想要每场比赛的上下文,无论其中有什么 - 也可能是其他比赛。但其他匹配不会扩展另一个匹配的上下文。
-
我尝试了
perl的解决方案,由于多个重叠案例,没有简单的解决方案。链接问题中的python解决方案将整个文件保存在数组中,这对大文件没有帮助。因此复杂性..速度将成为问题,除非您将其写在C/Rust/etc
标签: powershell sed command-line grep matching