1.sed简介
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明
- -i:直接修改文件内容
- -f:<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h:或--help 显示帮助。
- -n:或--quiet或--silent 仅显示script处理后的结果。
- -V:或--version 显示版本信息。
- -e:<脚本>或--expression=<脚本> 以选项中指定的script来处理输入的文本文件。
- -r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
- -{}:可组合多个命令,以分号分隔
动作说明
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。若希望直接修改文件内容,应添加选项 -i 。为了避免生产环境中因误操作导致系统故障,使用时要谨慎。
2.实例
2.1给文件的每一行加注释
[root@localhost ~]# cat sed
hubei
hunan
beijin
shanghai
guandong
shenzheng
hainan
jiangxi
fujian
shangdong
hebei
tianjin
[root@localhost ~]# sed -i 's/^/#/g' sed
[root@localhost ~]# cat sed
#hubei
#hunan
#beijin
#shanghai
#guandong
#shenzheng
#hainan
#jiangxi
#fujian
#shangdong
#hebei
#tianjin
2.2给文件中的指定行加注释
[root@localhost ~]# cat sed
hubei
hunan
beijin
shanghai
guandong
shenzheng
hainan
jiangxi
fujian
shangdong
hebei
tianjin
[root@localhost ~]# sed -i 's/^h/#&/' sed
[root@localhost ~]# cat sed
#hubei
#hunan
beijin
shanghai
guandong
shenzheng
#hainan
jiangxi
fujian
shangdong
#hebei
tianjin
//在文件的第一行的行首加注释
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '1s/^/#/g' sed
[root@localhost ~]# cat sed
#beijin
shanghai
guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
//在文件中的第三行行首加注释
[root@localhost ~]# sed -i '3s/^/#/g' sed
[root@localhost ~]# cat sed
#beijin
shanghai
#guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
//在文件中的1-3行行首加注释
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '1,3s/^/#/g' sed
[root@localhost ~]# cat sed
#beijin
#shanghai
#guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
2.3取消文件中所有注释
[root@localhost ~]# cat sed
#beijin
#shanghai
#guandong
#shen#zheng
#jiangxi
#fujian
#shangdong
#tianjin
[root@localhost ~]# sed -i 's/#//g' sed
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
2.4取消指定行的注释
//取消文件中第二行的所有注释
[root@localhost ~]# cat sed
beijin
#shang#hai
#guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '2s/#//g' sed
[root@localhost ~]# cat sed
beijin
shanghai
#guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
//取消文件中1-3行中的所有注释
[root@localhost ~]# cat sed
beijin
#shanghai
#guandong
#shenzheng
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '1,3s/#//g' sed
[root@localhost ~]# cat sed
beijin
shanghai
guandong
#shenzheng
jiangxi
fujian
shangdong
tianjin
//取消‘shenzheng’这行的注释
[root@localhost ~]# cat sed
beijin
shanghai
guandong
#shenzheng
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '/shenzheng/s/#//g' sed
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng
jiangxi
fujian
shangdong
tianjin
//取消‘shenzheng’这一行的所有注释
[root@localhost ~]# cat sed
beijin
shanghai
guandong
#shen#zheng huan #ying ni
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '/shen/s/#//g' sed
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng huan ying ni
jiangxi
fujian
shangdong
tianjin
3.删除
3.1删除指定行
//删除问文件中第二行
[root@localhost ~]# cat sed
beijin
shanghai
guandong
shenzheng huan ying ni
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '2d' sed
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
fujian
shangdong
tianjin
//删除文件中第5行到最后一行
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
fujian
shangdong
tianjin
[root@localhost ~]# sed -i '5,$d' sed
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
4.搜索
//打印出文件中第2行到第4行的内容
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
[root@localhost ~]# sed -n '2,4p' sed
guandong
shenzheng huan ying ni
jiangxi
//打印出文件中含有‘i’的行
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
hubei
hunan
yunnan
[root@localhost ~]# sed -n '/i/p' sed
beijin
shenzheng huan ying ni
jiangxi
hubei
//搜索出文件中含有‘h’的行,进行删除后显示删除后的剩余行
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
hubei
hunan
yunnan
[root@localhost ~]# sed '/h/d' sed
beijin
guandong
jiangxi
yunnan
5.替换
//将文件中的‘ni’替换为‘wo’
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying ni
jiangxi
hubei
hunan
yunnan
[root@localhost ~]# sed -i 's/ni/wo/g' sed
[root@localhost ~]# cat sed
beijin
guandong
shenzheng huan ying wo
jiangxi
hubei
hunan
yunnan
//每一行结尾若为. 则换成 !
[root@localhost ~]# cat sed
beijin.
guandong,
shenzheng huan ying wo.
jiangxi-
hubei-
hunan.
yunnan
[root@localhost ~]# sed -i 's/.$/!/g' sed
[root@localhost ~]# cat sed
beijin.
guandong,
shenzheng huan ying wo!
jiangxi-
hubei-
hunan!
yunnan
6.sed高级用法
//配合awk取出本机的ip
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:43:45:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.160/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
valid_lft 4648sec preferred_lft 4648sec
inet6 fe80::ad8c:10d3:b579:8614/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]# ip a|grep 'inet'|sed -n '3p'|awk '{print $2}'|sed 's//24//g'
192.168.0.160