我想在一个文件中搜索多个字符串,对于一个特定字符串,还显示其后面的 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
也接受~
而不是+