1.sed命令与参数
- 语法格式:
sed [options] [sed-commands] [input-file]
选项 动作 输入文件
- 选项:
-n 取消默认输出
-i 修改文件
-r 支持正则
-e 支持多条sed命令
- 动作:
a 追加
i 插入
d 删除
c 替换(替换原来的一整行)
s 替换(单词替换),搭配g使用为全局替换。将g修改为2就是对每行的第2出替换。
p 输出指定内容,与 -n选项一起用
w 另存文件
- 指定范围:
n1[,n2]{动作}
1{动作}#对第一行执行操作动作
1,10{动作}#对第一行到第十行执行操作动作
1,+20{动作}##对第一行及后面的二十行执行操作动作(例/aa/,+10d)
12{动作}#从1开始跨度2,例如只显示奇数行,22{动作}则相反
1,${动作}#1到最后一行
2.sed命令执行流程

3.sed增删查改
3.1增
查看文件原始数据
[[email protected] sed]# cat test.txt
01 daqi A
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
在第二行后增加数据
[[email protected] sed]# sed '2a 021 laowang' test.txt
01 daqi A
02 yucai B
021 laowang
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
在第二行插入数据
[[email protected] sed]# sed '2i 021 laowang' test.txt
01 daqi A
021 laowang
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
多行增加
[[email protected] sed]# sed '2i 021 laowang\n022 xiaowang' test.txt
01 daqi A
021 laowang
022 xiaowang
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
3.2删
删除单行与多行
[[email protected] sed]# sed '1d' test.txt
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
[[email protected] sed]# sed '1,3d' test.txt
04 xiaoming D
05 xiaolu E
06 laogong F
3.3改
使用新的一行数据替换原来的数据
[[email protected] sed]# cat test.txt
01 daqi A
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
[[email protected] sed]# sed '1c 001 zhuzhu A' test.txt
001 zhuzhu A
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
替换daqi为zhuzhu
[[email protected] sed]# cat test.txt
01 daqi A
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
[[email protected] sed]# sed 's/daqi/zhuzhu/g' test.txt
01 zhuzhu A
02 yucai B
03 liangde C
04 xiaoming D
05 xiaolu E
06 laogong F
修改selinux的状态为disabled
[[email protected] sed]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[[email protected] sed]# egrep -v "^#|^$" /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
使用变量替换
[[email protected] sed]# cat a.txt
a
b
c
[[email protected] sed]# x=a
[[email protected] sed]# y=b
[[email protected] sed]# sed "s/$x/$y/g" a.txt
b
b
c
分组替换
[[email protected] sed]# echo I am liang teacher|sed 's/^.* am \([a-z].*\) tea.*$/\1/g'
liang
3.4查
只打印第二行
[[email protected] sed]# sed -n "2p" test.txt
02 yucai B
3.5修改文件
[[email protected] sed]# cat a.txt
云计算01
云计算02
云计算03
云计算04
将云计算01修改为云计算001
[[email protected] sed]# sed -i 's/云计算01/云计算001/g' a.txt
[[email protected] sed]# cat a.txt
云计算001
云计算02
云计算03
云计算04
将云计算02修改为云计算002,并保留源文件
[[email protected] sed]# sed -i.backup 's/云计算02/云计算002/g' a.txt(.backup可以自定义,会生成源文件a.txt.backup)
[[email protected] sed]# cat a.txt
云计算001
云计算002
云计算03
云计算04
[[email protected] sed]# cat a.txt.backup
云计算001
云计算02
云计算03
云计算04
4.练习题
打印系统IP与掩码
[[email protected] ~]# ifconfig eno16777736|sed -rn '2 s#.* inet (.*) netmask (.*) bro.*$#\1 \2#gp'
10.0.0.66 255.255.255.0