我試圖格式化下面的文本文件格式,創紀錄的訂單會總是這樣文本文件中使用正則表達式
Dept 0100 Batch Load Errors for 8/16/2016 4:45:56 AM
Case 1111111111
Rectype: ABCD
Key:UMUM_REF_ID=A12345678,UMSV_SEQ_NO=1
UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID
Case 2222222222
Rectype: ABCD
Key:UMUM_REF_ID=B87654321,UMSV_SEQ_NO=2
UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID
NTNB ERROR :Invalid Value NTNB_MCTR_SUBJ=AMOD
Case 3333333333
Rectype: WXYZ
Key:UMUM_REF_ID=U19817250,UMSV_SEQ_NO=2
UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID
作爲輸出
1111111111~ABCD~UMUM_REF_ID=A12345678,UMSV_SEQ_NO=1~UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID
2222222222~ABCD~UMUM_REF_ID=B87654321,UMSV_SEQ_NO=2~UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID|NTNB ERROR :Invalid Value NTNB_MCTR_SUBJ=AMOD
3333333333~WXYZ~UMUM_REF_ID=U19817250,UMSV_SEQ_NO=2~UMSV ERROR :UNITS_ALLOW must be > or = UNITS_PAID
我想正則表達式如下
sed -r '/^Case/!d;$!N;/\nRectype/!D;s/\s+$/ /;s/(.*)\n(.*)/\2\1\n\1/;P;D' file.txt
但這只是工作,直到Rectype行,無法實現休息。
謝謝。
所需輸出的第二行中的空格看起來比輸入的相應行中的空格長。這是打算嗎? – Beta
@Beta:我只是更新了所需的輸出,需要修剪額外的空間(如果有的話) – vin
關於如何連接Key:的規則是什麼?第一行和第二行是用'〜'分隔的字段,後面的行用'|'連接起來?或者,以'N'開始的行總是用'|'加入,而其他所有用'〜'加入?或者是其他東西?並且所有> 2個空格的字符串應該縮小到2還是縮小到1? – ghoti