grep名を使用して複数行を1行に隠す

grep名を使用して複数行を1行に隠す

これを助けることができますか?

item : name_1 
       213321654
       32549846546
item : name_2 
       8563161631
item : name_3
       96315242161
       73216510631
       51654316416

変換が必要

item : name_1  213321654 32549846546
item : name_2  8563161631
item : name_3  96315242161 73216510631  51654316416

答え1

これはgrepではなくawkの操作です。

awk 'NF==1 { printf " %s", $1 } 
     NF>1 { printf "%s%s",l,$0; l="\n" ;} 
     END { printf "%s",l ;}'

主なヒントは、printf新しい行の挿入を防ぐことです。

答え2

有名な sed oneliner のバリエーションを使用して、条件付きで行を連結できます。

$ sed -e :a -e '$!N;s/\n[[:space:]]\{1,\}/ /;ta' -e 'P;D' file
item : name_1  213321654 32549846546
item : name_2  8563161631
item : name_3 96315242161 73216510631 51654316416

例を見るSed 1行の説明、パート1:ファイル間隔、番号付け、テキスト変換および置換

関連情報