根据以下投入:
serial0/0
SSL disabled
eth0/0
SSL enabled
SSL only
eth0/1
SSL disabled
bgroup0
SSL enabled
eth0/2
SSL disabled
eth0/3
SSL disabled
eth0/4
SSL disabled
bgroup1
SSL disabled
bgroup2
SSL disabled
bgroup3
SSL disabled
vlan1
SSL enabled
null
SSL disabled我试图获得一个冒号分隔的列表,如果输入的下一行以"SSL“开头,它将被追加到前一行,因此输出如下:
serial0/0:SSL disabled
eth0/0:SSL enabled:SSL only
eth0/1:SSL disabled
bgroup0:SSL enabled
eth0/2:SSL disabled
eth0/3:SSL disabled
eth0/4:SSL disabled
bgroup1:SSL disabled
bgroup2:SSL disabled
bgroup3:SSL disabled
vlan1:SSL enabled
null:SSL disabled正如您在这个理想输出的第二行中所看到的,应该考虑多行以"SSL“开头的情况。在这经典sed指南的基础上,我提出了以下sed脚本:
sed -r '/^SSL/! {
:again
N
s/(.*)\n(SSL.*)/\1:\2/
t again
}'这对我来说很有意义,但返回以下输出:
serial0/0:SSL disabled
eth0/0
SSL enabled
SSL only
eth0/1:SSL disabled
bgroup0
SSL enabled
eth0/2:SSL disabled
eth0/3
SSL disabled
eth0/4:SSL disabled
bgroup1
SSL disabled
bgroup2:SSL disabled
bgroup3
SSL disabled
vlan1:SSL enabled
null
SSL disabled知道我可能做错了什么吗?
发布于 2016-08-29 18:07:18
一个简单得多的解决方案:
sed -z 's/\nSSL/:SSL/g'-z说要使用NUL作为行分隔符--有效地使整个流显示为sed的一行。然后简单地将\nSSL序列替换为:SSL序列,有效地按照您希望的方式组合行。
发布于 2016-08-29 19:20:56
您可以使用任何sed风格来完成此操作,无需将整个文件读入内存,只需使用经典的N;P;D循环和分支:
sed ':b;$!N;s/\nSSL/:SSL/;tb;P;D' infile这就引入了Next行,尝试sub妓女--如果成功的话,它将分支回:b cycle it Print,然后D删除到换行符,重新启动循环。
https://unix.stackexchange.com/questions/306483
复制相似问题