先看样本:
闻道双衔凤带,
不妨单著鲛绡。
夜香知与阿谁烧。
怅望水沈烟袅。
云鬓风前绿卷,
玉颜醉里红潮。
莫教空度可怜宵。
月与佳人共僚。
微风和暖日鲜明,
草色迷人向渭城。
吴客卷帘闲不语,
楚娥攀树独含情。
红垂果蒂樱桃重,
黄染花丛蝶粉轻。
自恨青楼无近信,
不将心事许卿卿。
关山魂梦长,
鱼雁音尘少。
两鬓可怜青,
只为相思老。
归梦碧纱窗,
说与人人道。
真个别离难,
不似相逢好。
想合并得到下面的结果:
闻道双衔凤带,不妨单著鲛绡。夜香知与阿谁烧。怅望水沈烟袅。云鬓风前绿卷,玉颜醉里红潮。莫教空度可怜宵。月与佳人共僚。
微风和暖日鲜明,草色迷人向渭城。吴客卷帘闲不语,楚娥攀树独含情。红垂果蒂樱桃重,黄染花丛蝶粉轻。自恨青楼无近信,不将心事许卿卿。
关山魂梦长,鱼雁音尘少。两鬓可怜青,只为相思老。归梦碧纱窗,说与人人道。真个别离难,不似相逢好。
第一种方法:
gsed ':a N; /\n$/!s/\n//; ta' temp
> /\n$/ - 对应模式空间里的最后一个换行符
> /.../! - 表示模式空间里满足改正则模式的内容不执行之后的命令
> ta - 前面的命令执行结果为真时,跳回a
> 这里解释一下sed的执行过程,比如:
读入第一行,N读取下一行,现在模式空间的内容为:
第一行\n第二行,不满足 /\n$/,执行替换,得到:第一行第二行
N,读取下一行,模式空间为:
第一行第二行\n第三行,不满足
第二种方法:
gsed '/./{:a;N;s/\n\(.\)/ \1/;ta}' temp
第三种方法:
gsed -n 'H; /^\n/h; /^$/x; s/\n\(.\)/\1/gp; ${x; s/\n//gp}'
转自: