sed命令

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
原文地址:https://www.cnblogs.com/liping0826/p/13214013.html