awk:输出匹配前后的行

awk: output with lines before and after a match

我刚开始使用 bash 并且我问了这个问题关于我在 'grep' 中使用循环 'while' 时遇到的问题: 。 由于以下问题,我被告知在循环中使用 'awk' 而不是 'grep' https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice 在 'awk' 循环中替换 'grep' 确实有效。但是,我意识到我需要一个输出,它不仅可以保存匹配的行,还可以保存之前的 1 行和之后的 2 行。 我用谷歌搜索,但找不到方法。任何人都知道如何在 'awk'?

之后和之前保存行

提前致谢

假设您想要 seq 40 输出中的第 29 行和第 2 行(当您的环境支持时,输出从 1 开始的 40 行)。
您可以将 awk

一起使用
seq 40 | awk 'printnext>0 {print; printnext--}
              /29/ {print previous;print; printnext=2;}
              {previous=[=10=]}'

您应该看看您的 grep 支持哪些选项:

seq 40 | grep -B1 -A2 "29"