sed篇
1、介绍
在Linux中,sed命令是利用脚本处理文本文件。
sed可依照脚本指令来处理,编辑文本文件。
sed主要用来自动编辑一个或多个文件,简化对文件的反复擦欧洲哦,编写转换程序等。
2、语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
3、参数说明
●-e<script>或--expression=<script> 以选中指定的script来处理输入的文本文件。
●-f<script文件>或--file=<script文件> 以轩选项中指定的script文件来处理输入的文本文件。
●-n或—quite或—silent仅显示script处理后的结果。
●-V或—version显示版本信息。
4、动作说明
●a : 新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)。
●c : 取代,c后面可以接字符串,这些字符串可以取代n1,n2之间的行。
●d : 删除,因为是删除,所以d后面通常不接任何参数。
●i :插入,i后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)。
●p : 打印,亦即将某个选择的数据印出。通常p会与参数sed –n一起运行。
●s : 取代,可以直接进行取代的工作,通常这个s的动作可以搭配正规表示法。
5、实例
<1>、在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输出命令:
sed –e 4a\newline testfile
●以行为单位的新增/删除
<1>、将/root/testfile的内容列出并且打印行号,同时,请将第2~5行删除!
nl /root/testfile | sed '2,5d'
sed的动作为'2,5d',里面那个d就是删除!因为2—5行给他删除了,所以显示的数据就没有2—5行,注意:这里原本因该是要下达sed –e才对,没有-e也是可以的。sed后面接的动作,一定要加单引号扩住!
<2>、删除第3行到最后一行
nl /root/testfile | sed '3,$d'
<3>、在第二行前加入hello redhat
nl /root/testfile | sed '2i hello redhat'
<4>、如果是要增加两行以上,在第二行后面加入两行字
nl /root/testfile | sed '2a hello \
> redhat'
每一行之间都必须要以反斜杠 \ 来进行新的添加,所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 的存在。
●以行为单位的替换与显示
<1>、将第2到5行的内容取代为No 2-5 hello呢?
nl /root/testfile | sed '2,5c No 2-5 hello'
<2>、仅列出/root/testfile文件内容的第5—7行
nl /root/testfile | sed -n '5,7p'
可以透过这个sed的以行为单位的显示功能,就能够阿静某一个文件内放入某些行号选择出来显示。
●数据的搜寻并显示
<1>、搜索/etc/passwd有关root关键字的行
nl /etc/passwd | sed '/root/p'
如果root找到,除了输出所有行,还会输出匹配行。
使用-Nde 时候只将打印包含模板的行。
nl /etc/passwd | sed -n ' /root/p'
●数据的搜寻并删除
删除/etc/passwd所有包含root的行,其进行输出
nl /etc/passwd | sed '/root/d'
●数据的搜寻并执行命令
搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
注:最后的q是退出。
●数据的搜寻并替换
除了正行的处理模式之外,sed还可以用行为单位进行部分数据的搜寻并取代。基本上sed的搜寻与替代的与vi相当的类似!
sed 's/要被取代的字符串/新的字符串/g'
先观察原始信息,利用/sbin/ifcong查询IP
/sbin/ifconfig ens33
本机的ip是172.24.8.133
将IP前面的部分予以删除
/sbin/ifconfig ens33 | grep 'inet ' | sed 's/^.*address://g'
●多点编辑
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。
●直接修改文件内容(动作危险)
sed可以直接修改文件的内容,不必使用管道命令或数据流重定向!不过,由于这个动作会直接修改源使的文件,所以,千万不能随便拿系统配置来测试!我们继续使用/root/testfile文件来测试。
查看/root/testfile文件内容
利用sed将/root/testfile内每一行结尾的 . 替换成 !
sed -i 's/\.$/\!/g' testfile
利用sed直接在/root/testfile文件中最后一行加入#hello redhat
sed -i '$a #hello redhat' /root/testfile
因为$代表的是最后一行,而a的动作是新增内容,因此该文件最后新增了#hello redhat
sed的- I 选项可以直接修改文件内容,例如有一个超过1000行的数据,你想要在249行添加内容,用vim可能有点繁琐,这时用sed就简单多了。