Chinaunix首页 | 论坛 | 博客
  • 博客访问: 491355
  • 博文数量: 71
  • 博客积分: 1332
  • 博客等级: 少尉
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 16:25
个人简介

文章分类

全部博文(71)

文章存档

2013年(19)

2012年(9)

2011年(43)

分类: Python/Ruby

2011-04-05 23:26:59

初识sed

sed很实用,要想熟练的掌握需要多学习一些例子,自己逐个实验,才能加深印象。

1、简要
sed stream editor的缩写,是一个非交互式、出色的文本编辑工具,他以行为单位进行文本处理、编辑。他的一大优势就是处理打文件。当需要编辑的文件太大,而采用交互式的工具会很耗费内存,这时sed就可以很出色的完成任务,因为他只是将某些行加入内存。

2、语法格式

sed [选项] '命令1;命令2;...' 文件1 文件2

-n 选项
sed在将下一行读入缓冲区之前,默认会输出当前行在缓冲区中的内容,使用-n之后,便不进行输出。请看例子:

  1. # cat p
  2. root:x:0:0:root:/root:/bin/bash
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  5. adm:x:3:4:adm:/var/adm:/sbin/nologin
  6. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  7. (没有-n选项时)
  8. # sed '/^lp/p' p
  9. root:x:0:0:root:/root:/bin/bash
  10. bin:x:1:1:bin:/bin:/sbin/nologin
  11. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  12. adm:x:3:4:adm:/var/adm:/sbin/nologin
  13. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示1)
  14. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示2)
  15. (有-n选项时)
  16. # sed -n '/^lp/p' p
  17. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示3)
需要注意的是三个标示(1、2、3),其中标示1是输出缓冲区的内容(因为没有用-n选项将输出关闭),而标示2和标示3才是相应p命令打印出来的(因为-n选项关闭了缓冲区的输出)。

-f 选项
指定sed脚本,调用方法:

  1. # sed -f yourscript.sed inputfile,
-i 选项
直接修改文本

  1. (原文件内容)
  2. # cat p
  3. root:x:0:0:root:/root:/bin/bash
  4. bin:x:1:1:bin:/bin:/sbin/nologin
  5. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  6. adm:x:3:4:adm:/var/adm:/sbin/nologin
  7. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  8. (删除掉以root开头的行)
  9. # sed -i '/^root/d' p
  10. (处理后的文件内容)
  11. # cat p
  12. bin:x:1:1:bin:/bin:/sbin/nologin
  13. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  14. adm:x:3:4:adm:/var/adm:/sbin/nologin
  15. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-e 选项
可以是sed在一条命令行中执行多个命令,和 i 选项对比,没有将处理后的内容写入原文件。

  1. # sed -e 'cmd1' -e 'cmd2' inputfile
  1. (原文件内容)
  2. # cat p
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  5. (使用-e选项,删除以bin开头的行)
  6. # sed -e '/^bin/d' p
  7. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  8. (源文件内容未变)
  9. # cat p
  10. bin:x:1:1:bin:/bin:/sbin/nologin
  11. daemon:x:2:2:daemon:/sbin:/sbin/nologin
常用命令(很多,这里只列举了已经学会的)
p:打印内容

上面的例子中已经用到了。

=:显示行号

下面的这个例子可以看到 -e 选项和 = 命令的结果。

  1. # sed -n -e '/^bin/p' -e '/^bin/=' p
  2. bin:x:1:1:bin:/bin:/sbin/nologin
  3. 1

d:删除匹配行

  1. (原文件内容)
  2. # cat p
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  5. (使用-e选项,删除以bin开头的行)
  6. # sed -e '/^bin/d' p
  7. daemon:x:2:2:daemon:/sbin:/sbin/nologin

3、参考资料


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

lexunix2011-04-25 17:01:50

不错,很好 在此也推荐下sed比较全面的链接http://www.linuxsir.org/bbs/thread189620.html 加油