三剑客sed

1. set命令基本概念概述

sed命令:字符流编辑工具(行编辑)=按照每行中的字符进行处理操作

ps:全屏编辑工具vi/vim

sed命令作用说明:

1) 擅长对行进行操作处理

2) 擅长将文件的内容信息进行修改调整

编写脚本:修改文件内容信息时

 

网络服务中的IP地址进行修改:50台主机迁移机房

第一个步骤:vim /etc/sysconfig/network-scripts/ifcfg-eth0

第二个步骤: 重启网络服务

第三个步骤: 检查测试

自动修改网卡地址脚本:

第一个步骤:修改地址

sed -i "s#xxx#xxx#g" etc/sysconfig/network-scripts/ifcfg-eth0

第二个步骤:重启网卡服务

systemctl restart network

第三个步骤:过滤ip a s eth0 网卡地址信息存储到一个文件中 共享存储

echo "服务器修改后的ip地址: $(hostname -I)" >> /tmp/hggboy.txt

 

具体功能作用:

1)文件中添加信息的能力(增)

2)文件中删除信息的能力(删)

3)文件中查询信息的能力(查)

4)文件中修改信息的能力(改)

2. sed命令的执行原理

1) 语法信息:

sed 参数 条件+处理=指令 处理的文件信息

01.参数:

-n --文件默认存在的原内容不输出

-i --将还在内存中的信息存入文件(磁盘)

-r --识别扩展正则符(用于替换修改)

-e --识别sed命令多个操作

补充: i与u结合使用,会覆盖原来的文件信息

 

02.指令:

p print 输出信息

i insert 插入信息,在指定信息前面插入新的信息

a append 附加信息,在指定信息后面附加新的信息

d delete 删除指定信息

s substitute 替换信息(s###g)

c 替换修改指定的一整行信息

sed '2c替换的信息' 文件信息

2) sed命令实践操作

创建测试环境

 [root@HGG ~]# cat >>person.txt<<EOF
 
 > 101.hggboy,CEO
 > 102.zhaoyao,CTO
 > 103.Alex,COO
 > 104.yy,CFO
 > 105.feixue,CIO
 > EOG
 > EOF

3) sed命令查询信息方法

01. 根据文件内容的行号进行查找

测试1:根据行号输出单行内容

 [root@HGG ~]# sed -n '3p' person.txt 
 
 103.Alex,COO

测试2:根据行号,输出多行内容(连续)

 [root@HGG ~]# sed -n '1,3p' person.txt 
 
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO

测试3:根据行号,输出多行信息(不连续)

 [root@HGG ~]# sed -n '1p;3p' person.txt 
 
 101.hggboy,CEO
 103.Alex,COO

 

02. 根据内容信息进行查询

测试1:根据内容信息,输出单行内容

#将所有hggboy行的信息找出来

 [root@HGG ~]# sed -n '/hggboy/p' person.txt 
 101.hggboy,CEO

测试2:根据内容信息,输出多行内容(连续)

#将有hggboy到Alex行的内容信息输出

 [root@HGG ~]# sed -n '/hggboy/,/Alex/p' person.txt 
 
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO

测试3:根据内容信息,输出多行信息(不连续)

#将所有hggboy和Alex行的信息都输出

 [root@HGG ~]# sed -n '/hggboy/p;/Alex/p' person.txt 
 
 101.hggboy,CEO
 103.Alex,COO

4) sed命令添加信息(i,a,\n)

测试1: 在文件的第一行添加:100.hgggirl,UFO

 [root@HGG ~]# sed '1i100.hgggirl,UFO'  person.txt --只通过内存输出在屏幕
 100.hgggirl,UFO
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO
 
 [root@HGG ~]# sed -i '1i100.hgggirl,UFO' person.txt --在内存写入文件输出
 
 [root@HGG ~]# cat person.txt
 100.hgggirl,UFO
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO

测试2: 在文件的最后一行添加:106.hgggirl,UFO

 [root@HGG ~]# sed '6a106.hgggirl,UFO' person.txt 
 
 100.hgggirl,UFO
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO
 106.hgggirl,UFO

测试3: 在有hggboy的前面添加hgggirl , 在后面添加hggdog (-e)

 [root@HGG ~]# sed -e '/hggboy/ihgggirl' -e '/hggboy/ahggdog' person.txt 
 
 100.hgggirl,UFO
 hgggirl
 101.hggboy,CEO
 hggdog
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO

测试4: 添加多行信息,在最后一行添加100,101,102 (/n)

 [root@HGG ~]# sed '$a100\n101\n102' person.txt 
 100.hgggirl,UFO
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO
 100
 101
 102

5) sed命令删除信息

01.删除单行信息.删除第一行内容

 [root@HGG ~]# sed '1d' person.txt 
 
 101.hggboy,CEO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO

02.删除多行信息,删除1-3行neir

 [root@HGG ~]# sed '1,3d' person.txt 
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO

03.删除有hggboy信息的行

 [root@HGG ~]# sed '/hggboy/d' person.txt 
 
 100.hgggirl,UFO
 102.zhaoyao,CTO
 103.Alex,COO
 104.yy,CFO
 105.feixue,CIO

04.删除第三行与第六行信息

方法一:

 [root@HGG ~]# sed -e '3d' -e '6d' person.txt 
 
 100.hgggirl,UFO
 101.hggboy,CEO
 103.Alex,COO
 104.yy,CFO

方法二:

 [root@HGG ~]# sed  '3d;6d' person.txt 
 100.hgggirl,UFO
 101.hggboy,CEO
 103.Alex,COO
 104.yy,CFO

补充:

如何用sed命令取消/删除空行显示

sed -En '/^$/!p' person.txt

sed '/^$/d' person.txt

6) sed命令修改(替换)信息

sed 's#原来信息#要改的信息#g' 文件信息

ps: 若要替换修改的信息有#,用/代替

01.后项引用前项

sed 's#()#/n#g' 文件信息 --后项引用前项

利用sed命令取出ip地址信息

a.第一个历程:取出有ip地址的行

ip a s eth0|sed -n '3p'

b.第二个历程:取出ip

 ip a s eth0|sed -n '3p'|sed -r 's#^.*net (.*)#\1#g'|sed -r 's#(.*)/24.*#\1#g'

简化一:

  ip a s eth0|sed -n '3p'|sed -r 's#^.*net(.*)/24.*#\1#g'
 

最终简化:

 ip a s eth0|sed -rn '3s#^.*net(.*)/24.*#\1#gp'
 

补充:

01.修改文件直接自动备份

sed -i.bak 's#hggboy#hggboss#g' person.txt

02.批量修改文件的扩展名称

将hggboy.txt扩展名修改为hggboy.jpg

 ls /hgg/hggboy*txt|sed -r 's#(.*)txt#mv & \1jpg#g'|bash

03.批量重姓名专用命令:rename

rename 文件名称需要修改的部分 修改成什么样 将什么样的文件进行修改

rename .jpg .txt hggboy*.jpg

 [root@HGG hgg]# ls
 hggboy01.jpg hggboy03.jpg hggboy05.jpg hggboy07.jpg hggboy09.jpg
 hggboy02.jpg hggboy04.jpg hggboy06.jpg hggboy08.jpg hggboy10.jpg
 
 [root@HGG hgg]# rename .jpg .txt hggboy*.jpg
 
 [root@HGG hgg]# ls
 hggboy01.txt hggboy03.txt hggboy05.txt hggboy07.txt hggboy09.txt
 hggboy02.txt hggboy04.txt hggboy06.txt hggboy08.txt hggboy10.txt

 

posted @ 2022-01-08 15:55  Yusir-SRE  阅读(65)  评论(0编辑  收藏  举报