LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1553|回复: 5

这个用 sed 怎么实现? 多行合并

[复制链接]
发表于 2008-3-5 16:31:58 | 显示全部楼层 |阅读模式
样本:
  aaaa  bbbbbbbb  ccccc
  asdflkas  jaf;ldsakf  asdfaad
  asdfaas   asdfdad  asdadff

  asdfasdf  asdadfasdf  asdfasdf
  adfasdfa  dalkfjadlfa  afadfasdf
  asdfasdf  asdfasdfadf  asdfasfd

  asdasd   adsfasdfad  adfasdfasd
  adsfasd  adfasdfasd  sasdfasdff
  adsfasd  asdfasdfad  asdfasdfa

要每三行合并一行 ,这里有个 awk 实现 :

awk '{if (NR%3==0){print $0} else {printf"%s ",$0}}'

  aaaa  bbbbbbbb  ccccc  asdflkas  jaf;ldsakf  asdfaad  asdfaas   asdfdad  asdadff
发表于 2008-3-5 17:27:50 | 显示全部楼层
a way to do
  1. sed -n 'H;/^$/{x;s/\n//g;G;p}' file
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-5 18:07:31 | 显示全部楼层
………… ^^ yongjian 兄能否稍微解释一下 ? 这个有点超出我理解范围了

H ; hold space
/^$/  匹配空行?
x 交换
s/\n//g 删掉换行

。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 14:27:41 | 显示全部楼层
Post by yongjian;1823407
a way to do

  1. sed -n 'H;/^$/{x;s/\n//g;G;p}' file
复制代码


大致看懂了,yongjian 兄的实现有点问题,不是靠空行分隔,会陋掉最后一组(文件尾没有空行),

H ; 没有空行的都+到 hold , 匹配空行之前的行
/^$/{x;s/\n/g;G;p} , 匹配空行,交换模式空间, 删掉换行,+空行; 打印
回复 支持 反对

使用道具 举报

发表于 2008-3-6 17:03:47 | 显示全部楼层
sed -n '/^$/!{N;N;s/\n//g;p;}'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 23:47:45 | 显示全部楼层
谢谢,很漂亮 ^^ ,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表