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: