雨
分类: Python/Ruby
2011-04-05 23:26:59
sed很实用,要想熟练的掌握需要多学习一些例子,自己逐个实验,才能加深印象。
sed stream editor的缩写,是一个非交互式、出色的文本编辑工具,他以行为单位进行文本处理、编辑。他的一大优势就是处理打文件。当需要编辑的文件太大,而采用交互式的工具会很耗费内存,这时sed就可以很出色的完成任务,因为他只是将某些行加入内存。
sed [选项] '命令1;命令2;...' 文件1 文件2-n 选项
sed在将下一行读入缓冲区之前,默认会输出当前行在缓冲区中的内容,使用-n之后,便不进行输出。请看例子:
- # cat p
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- (没有-n选项时)
- # sed '/^lp/p' p
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示1)
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示2)
- (有-n选项时)
- # sed -n '/^lp/p' p
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin(标示3)
需要注意的是三个标示(1、2、3),其中标示1是输出缓冲区的内容(因为没有用-n选项将输出关闭),而标示2和标示3才是相应p命令打印出来的(因为-n选项关闭了缓冲区的输出)。-f 选项指定sed脚本,调用方法:
- # sed -f yourscript.sed inputfile,
-i 选项直接修改文本
- (原文件内容)
- # cat p
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- (删除掉以root开头的行)
- # sed -i '/^root/d' p
- (处理后的文件内容)
- # cat p
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-e 选项可以是sed在一条命令行中执行多个命令,和 i 选项对比,没有将处理后的内容写入原文件。
- # sed -e 'cmd1' -e 'cmd2' inputfile
- (原文件内容)
- # cat p
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- (使用-e选项,删除以bin开头的行)
- # sed -e '/^bin/d' p
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- (源文件内容未变)
- # cat p
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
常用命令(很多,这里只列举了已经学会的)p:打印内容上面的例子中已经用到了。=:显示行号下面的这个例子可以看到 -e 选项和 = 命令的结果。
- # sed -n -e '/^bin/p' -e '/^bin/=' p
- bin:x:1:1:bin:/bin:/sbin/nologin
- 1
d:删除匹配行
- (原文件内容)
- # cat p
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- (使用-e选项,删除以bin开头的行)
- # sed -e '/^bin/d' p
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
3、参考资料
lexunix2011-04-25 17:01:50
不错,很好 在此也推荐下sed比较全面的链接http://www.linuxsir.org/bbs/thread189620.html 加油