特定のラインポイントから特定の文字列を取得する[閉じる]

特定のラインポイントから特定の文字列を取得する[閉じる]

以下の行では、次の形式の特定のフィールドのみが必要です。

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

これが本当にあなたが望むものなら、より詳細な説明をすることができます。

関連情報