Grep 多个字符串,显示其中一个字符串之后的行数(但不显示另一个字符串)

Grep 多个字符串,显示其中一个字符串之后的行数(但不显示另一个字符串)

我想在一个文件中搜索多个字符串,对于一个特定字符串,还显示其后面的 5 行。

cat file | grep -e 'string1' -e 'string2'

当然有效,但我想要得到类似的东西

cat file | grep -e 'string1' -e -A 5 'string2'

我怎样才能做到这一点(我假设使用 -A 5 选项)它只显示包含 string1 的行,只显示包含 string2 的行以及 string2 之后的 5 行,而不显示 string1 之后的 5 行?

编辑:刚刚让它与 awk 一起工作:

cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}'

答案1

关于 awk 代码

awk '/string1/ {if ( c <= 0 ) c = 1;} /string2/ {c=5} { if (c-- > 0) print; }' file
  • cat ... | awk,awk 可以读取文件。
  • 我重新排列测试(如果 string1 在 string2 之后一行,它会中断 OP 解决方案中的打印)

答案2

您不能一次性使用grep.您需要使用两个grep实例:

grep 'string1' file; grep -A 5 'string2' file

如果您想在第一个成功后运行第二个:

grep 'string1' file && grep -A 5 'string2' file

答案3

塞德解决方案:

sed -n '/string2/,+4{p;b;};/string1/p' file

sed也接受~而不是+

相关内容