Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208306
  • 博文数量: 35
  • 博客积分: 2691
  • 博客等级: 少校
  • 技术积分: 527
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-11 09:42
文章分类

全部博文(35)

文章存档

2012年(5)

2010年(6)

2009年(2)

2008年(22)

我的朋友

分类: Python/Ruby

2012-07-03 15:59:33

原帖链接:
%3D1%26filter%3Ddigest%26digest%3D1%26digest%3D1

文本最后面有空行:无空行该语句不行
sed -nr ':a;N;/ms$/{H;z;ba};x;s/^\n//;s/\n/ /gp;' urfile
下面语句支持文本最后无空行
sed -nr ':a;N;$bb;/ms$/{H;z;ba};x;s/^\n//;s/\n/ /gp;b;z;:b;H;x;s/^\n//;s/\n/ /gp' urfile

点击(此处)折叠或打开

  1. ly5066113@ubuntu:~$ cat urfile
  2.     114.113.144.2:
  3.     19ms
  4.     19ms
  5.     19ms
  6.     36ms
  7.     22ms
  8.     19ms
  9.     18ms
  10.     218.61.204.73:
  11.     0ms
  12.     0ms
  13.     0ms
  14.     0ms
  15.     0ms
  16.     0ms
  17.     0ms
  18.     ly5066113@ubuntu:~$ sed ':a;$!N;/ms$/s/\n/ /;ta;P;D' urfile
  19.     114.113.144.2: 19ms 19ms 19ms 36ms 22ms 19ms 18ms
  20.     218.61.204.73: 0ms 0ms 0ms 0ms 0ms 0ms 0ms

  21. 复制代码
  22. 实现思路:
  23.         1、读入下一行数据
  24.         2、判断是否以ms结尾
  25.         3、如果是,替换\n为空格,跳转到1
  26.         4、如果不是,打印本行数据,删除本行数据,跳转到1
  27.        
  28.         代码实现:
  29.         :a #定义标签a
  30.         $!N #不是最后一行,执行N命令
  31.         /ms$/s/\n/ / #如果以ms结尾,将\n替换为空格
  32.         ta #如果s///命令执行成功,跳转到标签a处
  33.         P #打印pattern space的第一行
  34.         D #删除pattern space的第一行,循环
  35.        
  36.         此代码是使用sed进行合并行操作的典型代码,对于不同的情况,只需要将/ms$/替换成需要的正则表达式即可,思路上是通用的。


  37.         sed的标签类似于C语言中的goto,cjaizss兄说过,写代码的时候要有状态机的思想,代码只不过是一种实现。
  38.         下面是他用sed写的加法,里面应用了大量的标签,有兴趣可以研究下:
  39.         http://bbs.chinaunix.net/viewthread.php?tid=1063437

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