本章内容
- ▼sed [OPTION] 'script' *FILE* `行编辑`
- ▷OPTION
- ▷'script'——'地址命令'
- ▷'script'——'编辑命令'
- ▷'script'——'搜索替换'
- ▷sed示例
- ▷'script'——'高级编辑命令'
- ▷sed示例
▼sed [OPTION] ‘script’ FILE 行编辑
▷OPTION
[OPTION] | 用途 |
---|
-n | 不输出 |
-e | 多点编辑 |
-f /PATH/FILE | 从指定的文件读脚本 |
-r | 扩展正则表达式 |
-i.bak | 备份文件并编辑 |
▷’script’——‘地址命令’
符号 | 用途 |
---|
'NUM' | 指定行 |
'$' | 最后一行 |
'/PATTERN/' | 被匹配到的每一行 |
'NUM,NUM' | 范围的行 |
'NUM,+NUM' | 范围的行 |
'/PATTERN/,/PATTERN/' | 被匹配到的范围的行 |
'NUM,/PATTERN/' | 从第NUM行到被匹配到的范围的行范围的行 |
'1~2' | ~ 步进,1~2奇数行 |
'2~2' | 偶数行 |
▷’script’——‘编辑命令’
命令 | 用途 |
---|
'd' | 删除匹配的行 |
'p' | 打印匹配的行 |
'a STRING' | 换行追加文件 |
'i STRING' | 在前一行插入文本 |
'c STRING' | 替换文本 |
'w FILE' | 保存匹配到的文本到文件 |
'r FILE' | 读取指定文件到匹配的行后 |
'=' | 打印行号 |
'!' | 取反 |
▷’script’——‘搜索替换’
命令 | 用途 |
---|
's/匹配文本/替换文本/标记' | 查找替换也可以用s@@@ |
's/匹配文本/替换文本/g' | 全部替换 |
's/匹配文本/替换文本/p' | 显示替换成功的行 |
's/匹配文本/替换文本/w FILE' | 替换成功的行保存到文件 |
▷sed示例
[root@CentOS7 data]$seq 10 | sed '2~2d;1d'
3
5
7
9[root@CentOS7 data]$seq 10 | sed '2~2a\ 7788'
1
27788
3
47788
5
67788
7
87788
9
107788`1. 添加文本到文件`
[root@CentOS7 data]$sed '/# User specific/ialias' .bashrc
# .bashrcalias---------------`添加的文件`
# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'`2. 搜索替换`
[root@CentOS7 data]$sed -n 's/\(UUID\)/Error/p' /etc/fstab
Error=4c01a418-3b33-4271-9a19-0ff2895e7654 / xfs defaults 0 0
Error=219c85c0-a0ef-4ee3-9613-3da9cda5e048 /boot xfs defaults 0 0
Error=ae1302a1-04bb-447f-99ad-f7f84a16b06d /data xfs defaults 0 0
Error=5da7cfd1-2490-4dfc-a0bb-5e7135a16f7c swap swap defaults 0 0`3. -r`
[root@CentOS7 data]$grep 'root' /etc/passwd | sed -r 's/(root)/\1er/g'
rooter:x:0:0:rooter:/rooter:/bin/bash
operator:x:11:0:operator:/rooter:/sbin/nologin`4. ifconfig拿出IP`
[root@CentOS7 data]$ifconfig ens33 | sed -nr '2s/^[^0-9]+([0-9.]+) .*/\1/p'
192.168.88.131`修改网卡名eth0`
[root@CentOS7 grub2]$sed -ri.bak 's/(linux16.*)/\1 net.ifnames=0/' /boot/grub2/grub.cfg /boot/grub2/grub.cfg
▷’script’——‘高级编辑命令’
命令 | 用途 |
---|
P | 打印到输出之前 |
h | 把模式空间的内容放到保持空间 |
H | 把模式空间追加到保持空间 |
g | 从保持空间到模式空间 |
G | 从保持空间追加到模式空间 |
x | 模式空间与保持空间互换 |
n | 匹配的下一行到模式空间 |
N | 匹配的下一行追加到模式空间 |
d | 删除模式空间的行 |
D | 如果模式空间有换行符,不读取新行,重新使用模式空间 |
▷sed示例
1. `匹配的下一行到模式空间`
[root@CentOS7 ~]$seq 10 | sed -n 'n;p'
2
4
6
8
102. `1` :除了第一行 , `!G` 不从保持空间追加到模式空间, `h`把模式空间的内容放到保持空间, `$` :除了最后一行, `!d`删除模式空间的行
[root@CentOS7 ~]$seq 10 | sed '1!G;h;$!d'
10
9
8
7
6
5
4
3
2
1
[root@CentOS7 ~]$seq 5 | sed '1!G;h;$!d'
图解
练习

参考:传送门