Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3031903
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-04-12 10:12:45

cat file
mary,0,3,5459,HS
boby,0,4,,
lily,0,7,,
jamy,0,8,,
jack,0,9,5460,BN
ston,0,10,,
mark,0,11,,


要得到这样的结果:
mary,0,3,5459,HS
boby,0,4,5459,HS
lily,0,7,5459,HS
jamy,0,8,5459,HS
jack,0,9,5460,BN
ston,0,10,5460,BN
mark,0,11,5460,BN






  1. sed '/,$/!{p;s/.*,\([^,]*,[^,]*\)$/\1/;h;d};G;s/,\n//' file
[解析]
把有内容的行打印后,替换掉多余的内容,只保留之后两个字段的内容,然后 h 拷贝入 hold space 里,再 d 删除 pattern space 里的内容,并跳过了后面的代码,当匹配到 , 符号结尾的行,则直接执行后面 G,追加到后面,替换到末尾的逗号和换行。






  1. sed -r 'N;s/((,[^,\n]*){2})(\n.*),,/\1\3\1/;P;D' file
[解析]
这个思路也是沿用经典的 P;D 模式,N读取下一行,然后替换,打印第一行,删除第一行。

阅读(2625) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~