是否可以在 grep 命令上使用 -A 参数来每隔一行打印一次?

是否可以在 grep 命令上使用 -A 参数来每隔一行打印一次?

当我从文件中读取时,我想 grep 该文件中“x”的每个实例(第 1 行),以及下一行(第 2 行)和之后的行(第 3 行)...但是然后我想要第 6、7、10 和 11 行。有什么办法可以做到这一点吗?

答案1

该答案假设输入文件是常规文本。或者,如果输入文件实际上是 XML 或 JSON 或类似文件,则应使用特定于该格式的工具。

尝试:

awk 'BEGIN{a[0];a[1];a[2];a[3];a[6];a[7];a[10];a[11]} /x/{n=NR} n && (NR-n) in a'

怎么运行的:

  • BEGIN{a[0];a[1];a[2];a[3];a[6];a[7];a[10];a[11]}

    a这会为我们要打印的每一行初始化关联数组。

  • /x/{n=NR}

    如果x出现在该行,则将变量设置n为当前行号。请注意,它x被视为正则表达式。

  • n && (NR-n) in a

    如果n已分配并且NR-n是我们要打印的行之一,则打印该行。

相关内容