文字シーケンスが表示されるまで複数行をマージします。

文字シーケンスが表示されるまで複数行をマージします。

メッセージ文字列の終わりがない場合は、複数行をマージしてみてください。また、最初の行を除くすべての行からプレフィックスを削除したいと思います。

入力する:

b929e3e1-29db this is a long message that
abc074df-48a1 is continued onto multiple
dfd4c683-ab48 lines#EOM
ff513a72-570d this is a short message#EOM
980d10aa-bbed another short message#EOM

出力:

b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message

コマンドラインで利用可能な一般的なツールを使用するのが最善です。 (例:awk、sed)

答え1

GNU awk1の使用

gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
  • レコード区切り#EOM文字の後に改行文字が続くように設定します。
  • 改行文字の前の16進数とハイフンシーケンスを削除すると、古いRSが改行文字を食べたため、各レコードの初期シーケンスが保持されます。
  • $1=$1デフォルトの出力区切り文字を使用してレコードを強制的に再評価するようにフィールドを再割り当てします。
  • 記録を印刷してください(1本当です)

テスト

$ gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message


1.理解できない理由で交換やその他の様々な調整mawk後も動作しないようです)+\{1,\}

関連情報