Chinaunix首页 | 论坛 | 博客
  • 博客访问: 214319
  • 博文数量: 87
  • 博客积分: 192
  • 博客等级: 入伍新兵
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-14 07:44
文章分类

全部博文(87)

文章存档

2013年(1)

2012年(86)

分类:

2012-04-14 15:22:10

原文地址:sed之自动填充空白位 作者:zooyo

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读取下一行,然后替换,打印第一行,删除第一行。

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