从线的特定点获取特定字符串

从线的特定点获取特定字符串

从下面一行我只需要以下格式的特定字段:

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/,$//'

如果这确实是您想要的,我可以给出更详细的解释。

相关内容