我有一个如下所示的输出文件:
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 跳回标签 lThis 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)