首页 > 解决方案 > 用 ':' 将行尾替换为一行(SED 或 AWK 或其他)

问题描述

我有一个包含 SNMP 陷阱信息的文件,如下所示:

2018-08-10 13:38:10 gateway [UDP: [192.168.20.254]:53555->[192.168.20.57]:162]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (4294861396) 497 days, 2:10:13.96      SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-MIB::snmpTraps.6        SNMPv2-SMI::enterprises.1824.1.0.0.1 = STRING: "\"This is a string\""   SNMPv2-SMI::enterprises.1824.1.0.0.1 = Counter32: 3345556       SNMPv2-SMI::enterprises.1824.1.0.0.1 = Gauge32: 12343212        SNMPv2-SMI::enterprises.1824.1.0.0.1 = INTEGER: 99      SNMPv2-SMI::enterprises.1824.1.0.0.1 = IpAddress: 100.200.123.65        SNMPv2-SMI::enterprises.1824.1.0.0.1 = OID: iso.2.3.4.5.6.7.8.9 SNMPv2-SMI::enterprises.1824.1.0.0.1 = Timeticks: (2233121) 6:12:11.21

我需要像下面那样做一个单行

2018-08-10 13:38:10 gateway [UDP: [172.17.2.254]:53555->[172.17.2.57]:162]: DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (4294861396) 497 days, 2:10:13.96      SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-MIB::snmpTraps.6        SNMPv2-SMI::enterprises.1824.1.0.0.1 = STRING: "\"This is a string\""   SNMPv2-SMI::enterprises.1824.1.0.0.1 = Counter32: 3345556       SNMPv2-SMI::enterprises.1824.1.0.0.1 = Gauge32: 12343212        SNMPv2-SMI::enterprises.1824.1.0.0.1 = INTEGER: 99      SNMPv2-SMI::enterprises.1824.1.0.0.1 = IpAddress: 100.200.123.65        SNMPv2-SMI::enterprises.1824.1.0.0.1 = OID: iso.2.3.4.5.6.7.8.9 SNMPv2-SMI::enterprises.1824.1.0.0.1 = Timeticks: (2233121) 6:12:11.21

主要问题是,我需要将“行尾冒号和空白行替换为空格”

我尝试使用正则表达式,例如sed 's/:$\n/ /g',但它不起作用。

标签: bashawksed

解决方案


使用awk和三元 if-then-else 运算符:

awk '{printf "%s%s",$0,/:$/?" ":"\n"}' file

推荐阅读