Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203987
  • 博文数量: 111
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 790
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-29 13:41
文章分类

全部博文(111)

文章存档

2018年(10)

2017年(27)

2016年(18)

2015年(31)

2014年(25)

分类: LINUX

2015-03-27 17:31:06

sed高级命令:

一、模式空间(pattern space):
N;追加下一行(把文件两行看作一行),多行Next(N)命令通过读取当前行的下一行,并把两行组成一行来进行接下来的处理。
$!N;使用N的时候加一个判断,即当前行为最后一行时,不读取下一行的内容:
n;读取下一行(读取文件的偶数行),用下一个命令处理读取的行。
P;打印模式空间直到第一个"\n"为止的所有内容(打印模式空间一部分)。
p;打印模式空间的所有内容。
D;删除模式空间中第一行的内容,如果模式空间中内容不为空,D不会导致读入新行,相反它会回到最初的编辑命令,重要应用在模式空间剩余的内容上。
d;删除模式空间中所有的内容。

例:sed 'n;d' 4.log    #打印单数行;
     sed -n 'n;p' 4.log    #打印偶数行



二、保留空间(hold space):
       保留空间用于保存模式空间的内容,模式空间的内容可以复制到保留空间,同样保留空间的内容也可以复制回模式空间。
保存(hold)         h/H      将模式空间的内容复制或者追加到保留空间;
取回(get)           g/G      将保留空间的内容复制或者追加到模式空间;
交换(exchange)    x        交换模式空间和保留空间的内容;

例:cat hehe 
     1
     2
     3
     4
     5
     
      sed -n '1,3p;h;x' -i hehe    #模式空间打印1到3行的数,h把模式空间的数复制到保留空间,x交换模式空间和保留空间的内容;
      1
      2
      3


      sed 'h;G' -i hehe       #h将模式空间的内容都复制到保留空间,G将保留空间的内容追加到模式空间;
       1
       1
      2
      2
      3
      3       

三、高级流程控制命令:
     b/t两个命令可以用于跳转,我们在脚本中用命令":label"来创建标签后,然后就可以跳转过来,这样可以行程do{}while()式的循环结构。程序语言中一般都会支持顺序/条件/循环等流程控制。所以sed已经具有了一般程序语言的雏形了,可以做一些很复杂的事情。




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