Sed
如何修復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 info
出現traffic out info
在(...)
. 此外,有 2 個欄位由相同的分隔,
!如果存在,如何將全部替換
,
為;
內部?(...)
首選簡單的 shell 工具:sed/awk/…
根據您展示的範例,快速破解將是
- 不更換
,
內(...)
- 但要替換
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 ...
部分只是為了模擬您的命令輸出。
如果沒有嵌套括號,因為您沒有這麼說,那麼使用
sed
:sed ':repeat s/\(([^,)]*\),\([^)]*)\)/\1;\2/;t repeat' infile