如何修复csv字符串格式

如何修复csv字符串格式

我有输出线ipsec statusall <conn_name>。取决于交通流量,它可能是:

sr_mesh_aws_22{10}:  AES_CBC_256/HMAC_SHA2_256_128/MODP_1024, 0 bytes_i, 0 bytes_o, rekeying in 32 minutes

有时:

sp_mesh_6_7{8}:  AES_CBC_256/HMAC_SHA2_256_128, 336  bytes_i, 336  bytes_o (4 pkts, 15s ago), rekeying disabled

或者:

sr_mesh_aws_21{24}:  AES_CBC_256/HMAC_SHA1_96, 59189 bytes_i (469 pkts, 0s ago), 128238 bytes_o (431 pkts, 0s ago), rekeying in 32 minutes

字符串格式:

conn_name{id}: algorithm, traffic in info, traffic out info, rekeying info

一切都很容易解析,但是当流量开始流动时,额外的信息会出现在traffic in infotraffic out info之间的字段中(...)。而且有 2 个字段被相同的分隔,

如果存在的话如何将所有替换,;所有内部?(...)

更好的简单 shell 工具:sed/awk/...

答案1

根据您展示的示例,一个快速破解方法是

  • 不替换,(...)
  • 但要替换pkts,pkts;

给予:

echo "sr_mesh_aws_21{24}:  AES_CBC_256/HMAC_SHA1_96, 59189 bytes_i (469 pkts, 0s ago), 128238 bytes_o (431 pkts, 0s ago), rekeying in 32 minutes" | sed 's/pkts,/pkts;/g'

注意:该echo ...部分只是模拟您的命令输出。

答案2

如果没有嵌套括号,就像您没有说的那样,那么sed

sed ':repeat s/\(([^,)]*\),\([^)]*)\)/\1;\2/;t repeat' infile

相关内容