▼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
2
7788
3
4
7788
5
6
7788
7
8
7788
9
10
7788
`1. 添加文本到文件`
[root@CentOS7 data]$sed '/# User specific/ialias' .bashrc
# .bashrc
alias---------------`添加的文件`
# User specific aliases and functions
alias 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
10
2. `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'
图解
练习
参考:传送门