我有一个文件debug.log
,我想从中提取紧接在指定模式之前的所有行。
例子:
1 blabla
2 blabla
3 HERE THE IMPORTANT THING
4 HERE IT MATCHES MY PATTERN
5 blabla
6 ANOTHER IMPORTANT THING
7 PATTERN
5 blabla
预期结果:
HERE THE IMPORTANT THING
ANOTHER IMPORTANT THING
使用以下命令,我可以提取与我的模式匹配的行的行号
grep -n PATTERN debug.log |cut -f1 -d:
结果是
5
8
现在我想从每个数字中减一,并得到相应的行,如下所示:
sed -n 4p debug.log
sed -n 7p debug.log
这得到了我预期的结果。
我可以自动执行这个吗,这样我就不必sed
像这样手动运行了?
答案1
这更简单并且仅使用grep
:
grep -B1 PATTERN debug.log | grep -v 'PATTERN\|--'
或者,
grep -B1 PATTERN debug.log | grep -v -e 'PATTERN' -e '--'
答案2
您可以单独使用 sed 来完成此操作:
sed -n -e '/PATTERN/{x;p;x};h'
在每一行上,如果模式匹配,则打印保留空间。无论如何,将当前行复制到保留空间中以供下一次迭代。