使用grep
; 如何显示否日出现某种模式吗?
例如;man sh |grep -A3 -- '-c'
将返回几个匹配项。
我可能想隔离3路仅发生,以便显示:
--
-c Read commands from the command_string operand instead of from the standard input. Special parameter 0
will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the
remaining argument operands.
--
答案1
你想要的事件不是第二发生;它是第三。要获取-c
具有三行上下文的第三次出现的内容:
$ man sh | awk '/-c/{n++; if (n==3)f=3;} f{print;f--;}'
-c Read commands from the command_string operand instead of from the standard input. Special param‐
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
怎么运行的
awk 隐式地逐行读取其输入。此脚本使用两个变量。 n
跟踪我们见过的次数-c
。 f
跟踪我们应该打印多少行。
/-c/{n++; if (n==3)f=3;}
如果到达包含 的行
-c
,则将计数加n
一。如果n
是三,则设置f
为三。f{print;f--;}
如果
f
非零,则打印该行并减少f
。
替代解决方案
$ man sh | grep -A3 -m3 -- -c | tail -n4
-c Read commands from the command_string operand instead of from the standard input. Special param‐
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
该-m3
选项告诉 grep 仅返回前三个匹配项。 tail -n4
返回这些匹配项中的最后四行。-c
但是,如果第二和第三个匹配项在上下文行数之内,则此输出可能不是您想要的。