Chinaunix首页 | 论坛 | 博客
  • 博客访问: 309296
  • 博文数量: 29
  • 博客积分: 698
  • 博客等级: 上士
  • 技术积分: 293
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-11 11:14
文章分类

全部博文(29)

文章存档

2013年(2)

2012年(5)

2011年(22)

分类: LINUX

2011-05-03 10:02:00

  sed 的高级用法,一般将其分为3类:

一.多行模式空间(N,D,P)

二.保持空间和模式空间的交换用法(H h;G g; x)

三.脚本对控制流的改变( : b t 标签)

    在此,再提醒下自己 sed是个文本的流编辑器,我更喜欢称其为行编辑器。顾名思义它的处理最小单位是行,即一次只先往模式空间输入一行,打印结束后再输入第二行。当然也有可能一次性输入多行的情况,我想这就是称其为流编辑器的原因(行多了不就称为流了嘛,呵呵,个人愚解)。那么我们现在就进入sed高级命令的第一篇:

    N:通过输入新行,并将其附加到模式空间现有的行之后来创建多行空间,新行和原有的行以\n分隔。sed将其看做一行处理。(可见和n的区别,小n输出模式空间的内容后再输入新行)
 
    D:删除模式空间多行模式的第一个\n之前的内容,之后反复删除模式空间的其余行,并不输入新行。
    d:会清空模式空间的内容,并输入新行。

    P:输出多行模式空间的第一部分,直到第一个嵌入的换行符。
    p:打印匹配的所有输出
    
    PS无论P 或者 p 都可以当输出被抑制的时候,强制打印匹配行,且P经常放在N,D之前组成一个循环对数据流进行控制,但一次只输出一行,然后返回到脚本的顶端将所有命令应用于第二行。如果没有这个循环,那么当执行到脚本的最后一个命令时,模式空间的这两行将被输出。
    
阅读(3411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~