一. sed的整行替换 c
1
2
3
4
5
6
7 #示例:sed的整行替换 c
[root@cPen_A 10]# cp /etc/sysconfig/selinux .
[root@cPen_A 10]# sed -i '/^SELINUX=/c SELINUX=disabled' selinux
[root@cPen_A 10]# cp /etc/ssh/sshd_config .
[root@cPen_A 10]# sed -i '/^#Port/c Port 2233' sshd_config
[root@cPen_A 10]# cat sshd_config |grep Port
Port 2233
1 | #注:对文件的修改 用sed比较好 |
需求分析:
read或者位置变量
修改配置文件 sed (整行替换 或 局部替换)
ip合法判断 --> 正则
二. sed的w命令 写入文件
1
2
3
4
5
6
7
8 sed的w命令 写入文件
#示例:把以#开头的行 不写到文件里
[root@cPen_A 10]# sed '/^#/!w a.txt' selinux
[root@cPen_A 10]# cat selinux |sed '/^#/!w abc.txt'
[root@cPen_A 10]# cat a.txt
SELINUX=disabled
SELINUXTYPE=targeted
三. sed的替换 -->核心功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 [root@cPen_A 10]# sed -i 's/xiaomi/redmi/' phone.txt #注:替换每一行的第1个xiaomi替换为redmi
[root@cPen_A 10]# sed -i 's/vivo/nokia/2' phone.txt #注:替换每一行的第2个vivo替换为nokia
[root@cPen_A 10]# sed -i 's/oppo/meizu/g' phone.txt #注:每一行所有的oppo替换为meizu
[root@cPen_A 10]# sed -i 's/xiaomi/redmi/2g' phone.txt #注:替换每一行的第2个后所有xiaomi全部替换为redmi
[root@cPen_A 10]# sed -i '/^ONBOOT/ s/yes/no/' ifcfg-ens33 #注:查找替换 (局部替换)
[root@cPen_A 10]# sed -i '8 s/192.168.0.1/192.168.0.2/' ifcfg-ens33 #注:根据 行号替换 (局部替换)
[root@cPen_A 10]# sed -i '8 s/GATEWAY.*/GATEWAY=192.168.0.2/' ifcfg-ens33 #注:整行替换
#示例:把所有apple删除 --> 删除部分字符串
[root@cPen_A 10]# sed -i 's/apple//g' phone.txt #注:拿空的去替换它
\n 换行
\t tab
[root@cPen_A 10]# sed -i 's/s/\t/g' phone.txt
---------------------------------------------------------
[root@cPen_A 10]# sed -i '1c sanchuang' /etc/hostname
[root@cPen_A 10]# sed -i '3,5s/^/#/' phone.txt #注:3-5行加注释
[root@cPen_A 10]# sed -i '3,5s/$/ sanchuang/' phone.txt #注:3-5行 末尾加sanchuang
[root@cPen_A 10]# sed -i '/^DNS2/ s/^/#/' ifcfg-ens33 #注:注释
#DNS2=114.114.114.114
1
2 #示例:
[root@cPen_A 10]# sed -i 's#/sbin/nologin#/bin/bash#' passwd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #示例:
[root@cPen_A 10]# cat c.txt
0.0.0.0
1.1.1.1
2.2.2.2
[root@cPen_A 10]# cat c.txt|sed -n 's/$/:80/;H;${x;s/\n/,/2g;p}'
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
h H Copy/append pattern space to hold space.
g G Copy/append hold space to pattern space.
x Exchange the contents of the hold and pattern spaces.
---------------------------------------------------------------------
[root@localhost 10]# cat c.txt |tr '\n' ','|sed -n 's/,/:80&/g;p'|awk -F, 'OFS=","{print $1,$2,$3}'
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
1 | sed的命令中&的用法 |
(正则) --》对应一个标签–》分组
从左到右 1开始
\3 引用第3个分组(标签)
1
2
3 示例:
[root@cPen_A 10]# echo aaa bbb 123456 ccc | sed -r 's/([a-z]+) ([a-z]+) ([0-9]+) ([a-z]+)/\3/'
123456
四. 模式空间(pattern space)和暂存空间(hold space)相关的命令
模式空间(pattern space)和暂存空间(hold space)相关的命令:
n 输出模式空间行,读取下一行替换当前模式空间的行,执行下一条处理命令而非第一条命令。
N 读入下一行,追加到模式空间行后面,此时模式空间有两行。
h 把模式空间里的行拷贝到暂存空间。
H 把模式空间里的行追加到暂存空间。
g 用暂存空间的内容替换模式空间的行。
G 把暂存空间的内容追加到模式空间的行后。
x 将暂存空间的内容于模式空间里的当前行互换。
! 对所选行以外的所有行应用命令。
五. 练习
1 | 练习: |