从下面一行我只需要以下格式的特定字段:
031100000080,Z45G0001,09:43:08.5234999,09:43:09.7925597,0:1:269,737683
输入线:
17/05/2019 09:43:09.792559|TraceDetail |UPBSStandardGenericBillPaymentComponent.PostBillPaymentTransacti|Total Time [125456] |783562 [11] [25458] | Consumer Number [0345454545000 ] , UCID [Z456G0001] Sending Time [09:43:08.5234999] Receive Time [09:43:09.7925597] Total Time [0:1:269] STAN is [737683]
答案1
通过管道传输您的输入
sed 's/][^[]*\[/,/g;s/\([^,]*,\)\{3\}//;s/ *,/,/;s/]$//'
s/][^[]*\[/,/g
[]
通过删除 之间的所有内容并用逗号分隔来完成大部分工作s/\([^,]*,\)\{3\}//
删除您不使用的第一个字段s/ *,/,/
去除过时的空间s/]$//'
最后删除最后一个]
更新: 您的评论表明,每行中字段的数量和顺序可能不同。在这种情况下,更通用的方法是将字段名称附加到每行并循环以提取相应的字段:
sed -e 'G;s/$/,Consumer Number,UCID,Sending Time,Receive Time,Total Time,STAN is,/;:loop' -e 's/ \(.*\) \[\([^] ]*\)\(.*\n.*,\)\1,/\3\2,/;tloop' -e 's/.*\n,//;s/,$//'
如果这确实是您想要的,我可以给出更详细的解释。