bash - 用 ':' 将行尾替换为一行(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',但它不起作用。
解决方案
使用awk
和三元 if-then-else 运算符:
awk '{printf "%s%s",$0,/:$/?" ":"\n"}' file
推荐阅读
- python - 多显示器设置 pyautogui 上的屏幕截图
- vue.js - PhpStorm + vue.js 格式
- ios - 如何修复 XCode 11.7 错误不支持的 iOS 13.6?
- python - focusIn 和 focusOut 事件类型是什么意思?
- javascript - react-full-page 阻止我的页面以特定 ID 打开,例如 http://localhost:3000/#someIdWhereIWantThePageToBeOpened
- node.js - Angular 7、Node JS、IIS、pm2、ERR_CONNECTION_RESET 上传大文件时
- powershell - 使用十六进制值调用 WebRequest
- android - 使用Kotlin单击editText时如何修复NestedScrollView
- opencv - OpenCV 声称找到“错误”的 cuda 版本
- php - 在 WooCommerce 产品描述周围添加一个 div