操作系统三剑客命令(二)--sed

操作系统三剑客命令(二)–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   :  将一行信息进行替换修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值