次の行を前の行とマージ

次の行を前の行とマージ

次の行を含むテキストファイルがあります。

LIN This is the value which I need
      from this line which has a very long line
SHR This1;This2;
     This3;
GYC This is an extra.

出力は次のようになります。

LIN This is the value which I need from this line whi a very..
SHR This1;This2;This3;
GYC This is an extra.

sedPythonで実装する前に、まずこれを試しました。だから見つけました...

sed 's/     //' filename.txt 

上記のコードスニペットは空の4 + 1スペース(常に固定)を削除する1つのことだけを行いますが、情報を抽出するために行をLINE&SHRTタグに移動する必要があるため、どのように進むべきかわかりません。また、ラベル行(LINE/SHRT/EKY/EKC/USERを使用)が続くと、追加の空白として表示されます。新しい行でなければならない場合は、次の行に進みます。

質問、sedを使用して1行を前の行に移動できますか?行が続くか終了するかを示すためにスペースを区別する方法

ベストアンサー1

作業を簡単にしてください。

sed 'H;1h;$!d;g;s/\n  */ /g'

この短いスクリプトは、1 つ以上のスペースで始まるすべての行を前の行に連結します。

仕組み:H各行を予約済みスペースに追加します。改行を避けるために、最初の行がコピーされます1h。最後の行でない場合はd削除し、またはを使用して予約済みスペースをパターンスペースに移動しますg。ファイル全体がパターンスペースにあるので、sコマンドはスペースがあるすべての改行を単一のスペースに置き換えます。

GNUを使用すると、sedはるかに簡単になります。

sed -z 's/\n  */ /g'

おすすめ記事