使用sed合并两个模式之间的线条

jpl*_*usc 7 grep sed

我有一个如下所示的输出文件:

HEADER 1:
server1 server2 server3
server4 server5 server6
server7 server8 server9
HEADER 2:

HEADER 1:
server10 server11 server12
server13 server14 server15
server16 server17 server18
HEADER 2:
Run Code Online (Sandbox Code Playgroud)

我需要合并两个标头之间的所有内容,以便更新的输出文件如下所示:

HEADER 1:
server1 server2 server3 server4 server5 server6 server7 server8 server9
HEADER 2:

HEADER 1:
server10 server11 server12 server13 server14 server15 server16 server17 server18
HEADER 2:
Run Code Online (Sandbox Code Playgroud)

标题名称始终保持不变.

我在Windows中使用UnxUtils,所以不幸的是我没有awk来进行操作.我如何使用sed进行操作?

per*_*eal 17

使用sed:

sed '/HEADER 1/{n;:l N;/HEADER 2/b; s/\n//; bl}' input
Run Code Online (Sandbox Code Playgroud)
  • n 跳过/打印当前行(HEADER 1),清除缓冲区
  • l 是一个循环标签(转到标签)
  • N 向缓冲区添加(追加)行(保留换行符)
  • /HEADER 2/b,其中b是分支(没有标签,它是中断),当看到HEADER2时爆发
  • s/\n// 删除缓冲区中的换行符
  • bl 跳回标签 l


Jot*_*tne 5

This shows how it could be done using awk
You can download Gawk for Windows

awk '/HEADER/ {printf "\n%s\n",$0;next} {printf "%s ",$0}' file

HEADER 1:
server1 server2 server3 server4 server5 server6 server7 server8 server9
HEADER 2:

HEADER 1:
server10 server11 server12 server13 server14 server15 server16 server17 server18
HEADER 2:
Run Code Online (Sandbox Code Playgroud)