给定一个像这样的文件
asdasd
123
X
456
X
789
asd
asd
asd
asd
如果我grep -C3 'X'
在上面运行 grep: ,我会得到以下结果
asdasd
123
X
456
--
456
X
789
asd
asd
看起来 grep 只显示每个匹配到上一个或下一个匹配的上下文。有没有办法让它显示整个上下文,无论模式是否包含在其中?看了下man grep
,好像没有这个选项。预期结果如下:
asdasd
123
X
456
X
789
--
123
X
456
X
789
asd
asd
答案1
这是一个简短的 Perl 脚本来完成此操作。它确实将整个文件读入内存,因此可能不适合真正的大文件。
perl -0777 -snE '
@lines = split /\n/;
for $idx (grep {$lines[$_] =~ $p} 0...$#lines) {
say join "\n", @lines[$idx-($n-1) .. $idx+($n-1)], "--";
}
' -- -n=3 -p='X' file