lionel chang

导航

sed

一.功能:过滤和翻译文本的流编辑器

  sed = stream editor

二.选项

  -n:不输出

  -e script:将script加到命令中执行

  -f script_file :将script_file的内容加到命令中执行

  -r :使用可扩展的正则表达式

  -s : --separate

  -i :-in-place :直接对文件进行修改

三.使用地址范围

  可以使用一个地址范围对文本进行操作

例1:删除第2~5行

首先将/etc/passwd复制到当前目录下,查看文件的第2~5行,如下:

运行  nl passwd |sed '2,5d'后,会输出如下:

可见,第2~5行被删除了。但是,less passwd可以看到passwd文件的2~5行还在,并没有删除,可见sed并没有改变文件

 例2:添加一行

运行 nl passwd | sed '2a drink tea' 后输出:

例3:添加两行

运行 nl passwd | sed '2a Drink tea or... \

> drink bear?'

 例4:替换

运行 nl passwd | sed '2,5c NO 2-5 number',后输出

可见,第2~5行被替换为 NO 2-5 number。

例5:输出指定行 

    运行nl passwd | sed -n '5,7p',将输出第5~7行,如下:

例6:使用sed从ifconfig的输出中得到ip地址

6-1:运行 ifconfig eth0,输出网卡信息:

6-2:使用grep选取指定行

运行 ifconfig eth0 | grep 'inet ',得到了包含ip地址的那一行

6-3:删除ip地址前面的字符

运行 ifconfig eth0 | grep 'inet ' | sed 's/^.*地址://g',后输出:

可见 'inet 地址'这几个字符被清除掉了

6-4:删除ip地址后面的字符

给上一条命令后面加上 sed 's/广播.*$//g',运行输出为:

可见,只剩下我们想要得ip地址了。

例7:获取manpath.config文件中包含MAN字符,并且不是注释(即不以#开始)的行

7-1:删除注释行

运行 cat /etc/manpath.config | grep 'MAN'| sed 's/#.*$//g'

7-2:删除空白行

再上一条命令后面加上  sed '/^$/d',即可删除空白行:

例8:直接修改文件

前面的例子都没有对源文件进行任何修改。怎样利用sed直接修改源文件呢? 加上-i 就可以了。

首先运行 sed -i '2a hello world' passwd,
再运行 nl passwd:

 

 

 

posted on 2012-12-17 19:07  woshizyl  阅读(307)  评论(0编辑  收藏  举报