使用 grep;如何显示模式的第 N 次出现?

使用 grep;如何显示模式的第 N 次出现?

使用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跟踪我们见过的次数-cf跟踪我们应该打印多少行。

  • /-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但是,如果第二和第三个匹配项在上下文行数之内,则此输出可能不是您想要的。

相关内容