本文介绍了使用sed合并两个模式之间的线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个看起来像这样的输出文件:
I have an output file that looks like this:
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:
我需要合并两个标题之间的所有内容,以便更新后的输出文件如下所示:
I need to merge everything between the two headers so the updated output file looks like this:
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:
标题名称始终保持不变.
The header names always remain constant.
我在 Windows 中使用 UnxUtils,所以很遗憾我没有 awk 来进行操作.我如何使用 sed 来处理它?
I'm using UnxUtils in Windows, so unfortunately I don't have awk to do the manipulation. How do I go about it using sed?
推荐答案
使用 sed:
sed '/HEADER 1/{n;:l N;/HEADER 2/b; s/
//; bl}' input
n
跳过/打印当前行(HEADER 1),清除缓冲区l
是循环标签(goto label)N
向缓冲区添加(追加)行(保留换行符)/HEADER 2/b
,这里b是分支(没有标签,就是break),看到HEADER2就跳出来s///
删除缓冲区中的换行符bl
跳回到标签l
n
skips/prints the current line (HEADER 1), clears bufferl
is a label for looping (goto label)N
adds (appends) lines to buffer (preserving newlines)/HEADER 2/b
, where b is branch (without the label, it is break), break out when HEADER2 is seens///
removes the newlines in the bufferbl
jumps back to labell
这篇关于使用sed合并两个模式之间的线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!