马哥预习课12_文本处理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
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'
图解

1, 第一次取1
3, 复制1
2, 1!G:第一行不追加
7, 复制
6, 追加
11, 复制
10, 追加
15, 复制
14, 追加
19, $! 不复制
18, 追加
5, 第二次取
9, 第三次取
13, 第四次取
17, 第五次取
4, 删除
8, 删除
12, 删除
16, 删除
20, 不删除
21, 最后输出
1
2
3
4
5
seq 5
模式空间
保持空间
d删除
5 4 3 2 1

练习
在这里插入图片描述

参考:传送门

猜你喜欢

转载自blog.csdn.net/weixin_42758707/article/details/89882463