操作系统三剑客命令(二)–sed
一. 三剑客sed命令概念介绍:
作用说明: stream editor for filtering and transforming text
文件处理编辑命令
原理过程: 按照文件每行信息进行处理, 找出符合条件信息, 执行相应操作
语法结构: sed [参数] '条件 指令操作' 文件信息
二. 三剑客sed命令使用方法
查 删 增 改
准备环境:
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
1) 如何进行查询
a 按照行号查询信息
查找单行信息: sed -n '3p' 文件信息
查找多行信息: sed -n '2,4p' 文件信息
查找连续多行: sed -n '2p;4p' person.txt 不连续多行
sed -n '2,$p' 文件信息
b 按照字符查询信息
查找单行信息: sed -n '/CTO/p' person.txt
查看多行信息: sed -n '/CTO/,/CIO/p' person.txt
或者 sed -n '/CTO/p;/CIO/p' person.txt
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
[root@linux67 oldboy]# sed -n '/CTO/,/CIO/p' person.txt
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
2) 如何进行删除
sed -i '6d' person.txt
sed -i.bak '/COO/d' person.txt --- 将源文件内容先进行备份, 在进行操作
sed -ri '/CFO|CTO/d' person.txt
坑: 删除一个文件有#号的行
1) 查询需要删除内容
sed -n '/^#/p' config
2) 删除文件信息
sed -i '/^#/p' config
PS:
1. -i参数后面不能再跟上其他参数
2. -i参数和-n参数尽量不要结合使用
-i : 真正修改文件内容
3) 如何进行添加
3a: 在第三行的下面添加相应信息
3i: 在第三行的上面添加相应信息
1)添加一行:
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
105,feixue,CIO
[root@linux67 oldboy]# sed -i '1a102,zhaoyao,CTO' person.txt
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
105,feixue,CIO
[root@linux67 oldboy]# sed -i '5i103,Alex,COO' person.txt
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
105,feixue,CIO
[root@linux67 oldboy]# sed -i '3i103,Alex,COO' person.txt
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
105,feixue,CIO
2)添加多行:
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
105,feixue,CIO
[root@linux67 oldboy]# sed -i '2a103,Alex,COO\n104,yy,CFO' person.txt
[root@linux67 oldboy]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
103,Alex,COO --- 插入到第2行前面
104,yy,CFO --- 插入到第3行后面
[root@linux67 oldboy]# sed -e '2i103,Alex,COO' -e '3a104,yy,CFO' person.txt
101,oldboy,CEO
103,Alex,COO
102,zhaoyao,CTO
105,feixue,CIO
104,yy,CFO
-e : 表示可以识别多个操作信息
4) 如何进行修改
sed 参数 's#需要替换信息#替换成什么信息#g' 文件信息
sed '$s#CEO#CIO#g' person.txt
--- 指定条件进行替换
sed -i "s#$Init_IP#$Change_IP#g" $File_info
--- 指定变量信息做替换需要注意双引号使用
练习: 如何快速修改网卡地址信息
企业网络环境发生变更 修改网卡地址 --- 修改地址脚本
# cat change_IP.sh
#!/bin/bash
Init_IP=`ip a s eth0|grep "inet "|grep -E "([0-9]+\.?){4}" -o|head -1`
Change_IP="10.0.0.100"
File_info="/oldboy/ifcfg-eth0"
sed -i "s#$Init_IP#$Change_IP#g" $File_info
脚本编写需求:
1) 脚本编写需要有逻辑性
2) 脚本编写需要有通用性
后向引用前项替换:
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\1#g'
12
[root@linux67 scripts]# echo 1234|sed -r 's#(12)(34)#\2#g'
34
[root@linux67 scripts]# echo 1234567890|sed -r 's#.*#<&>#g'
<1234567890>
练习题: 利用sed命令取出IP地址信息
思路1) 显示出IP地址
ip a s eth0
思路2) 有IP地址的行显示出来
# ip a s eth0|sed -n '3p'
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
思路3) 取出IP地址
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)#\1#g'|sed -r 's#(.*)/24.*$#\1#g'
sed -r 's#^.*et (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'
ip a s eth0|sed -n '3p'|sed -r 's#^.*et (.*)/24.*$#\1#g'
sed -n '3p'
sed -r 's#^.*et (.*)/24.*$#\1#g'
ip a s eth0|sed -nr '3s#^.*et (.*)/24.*$#\1#gp'
04. sed命令应用总结
sed命令参数总结:
-n : 取消默认输出
-e : 识别多操作指令
-r : 识别扩展正则
-i : 真正编辑修改文件内容
sed命令指令信息:
p : 输出显示指定信息
d : 删除指定信息
s : 替换指定信息
g : 全局替换信息
a : 添加指定信息在相应行的后面
i : 插入指定信息在相应行的前面
c : 将一行信息进行替换修改