使用 grep 名称将多行隐藏为单行

使用 grep 名称将多行隐藏为单行

你能帮我这个吗?

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

这是 awk 的工作而不是 grep

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 单行解释,第一部分:文件间距、编号以及文本转换和替换

相关内容