如何在匹配/空行后打印第 n 行

Ale*_*dru 1 scripting sed awk

我正在尝试编写一个简短的脚本来查找空行,然后在空行之后打印第 n 行。

为了

foo1
foo2
foo3

bar1
bar2
bar3

spam1
spam2
spam3

eggs1
eggs2
eggs3
Run Code Online (Sandbox Code Playgroud)

在空行之后打印每第二行将导致:

foo2
bar2
spam2
eggs2
Run Code Online (Sandbox Code Playgroud)

我尝试使用 sedsed -n -e "/^$/ {N; N; x; N; p; x; d}"但我无法清除保留空间,结果不是我想要的。

Sté*_*las 8

awk '++n == 2; !NF {n = 0}' < your-file
Run Code Online (Sandbox Code Playgroud)

或者:

sed -n '
  n;p
  :1
  /./{
    n;b1
  }' < your-file
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样需要 sed 帮助的读者,这里是对两者的简要解释: **awk 版本是** `这两件事都在每一行完成:增加 n (从 0 开始)每行,并且 IF 我们现在 n == 2,打印 $0 (默认操作)。!NF :当没有字段(即行为空)时为 true,在这种情况下:将 n 重置为 0`。**第二个(sed)是**:`转到下一行;打印它。然后对于以下每个非空行(即:至少 1 个字符):转到下一行,并在标签 1 上分支(从而忽略那些 n&gt;2 行)。当条件不匹配时,循环(因为 -n)到开头` (2认同)