美文网首页
7月24日 系统正则符号和sed

7月24日 系统正则符号和sed

作者: Mashirooooo | 来源:发表于2019-07-24 20:54 被阅读0次

    sed命令

    修改文件内容,对文件行进行操作
    配置文件,文本文件

    语法结构

    sed [参数] ‘条件 指令’ 文件信息

    [root@oldboy63-libo oldboy]$ sed -n '/disabled/p' /etc/selinux/config 
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    
    sed操作方式
    在文中添加信息
    将文件中指定信息删除
    替换修改文件内容
    查找相应内容信息

    查看文件信息

    按指定行查询内容
    [root@oldboy63-libo oldboy]$ cat person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed -n '3p' person.txt 
    103,Alex,COO
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed -n '2p;5p' person.txt 
    102,zhaoyao,CTO
    105,feixue,CIO
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed -n '2,5p' person.txt 
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    
    按指定内容进行过滤
    [root@oldboy63-libo oldboy]$ cat person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    [root@oldboy63-libo oldboy]$ sed -n '/Alex/p' person.txt 
    103,Alex,COO
    [root@oldboy63-libo oldboy]$ sed -n '/oldboy/p;/yy/p' person.txt 
    101,oldboy,CEO
    104,yy,CFO
    [root@oldboy63-libo oldboy]$ sed -n '/oldboy\|yy/p' person.txt 
    101,oldboy,CEO
    104,yy,CFO
    
    在指定行后面添加信息
    [root@oldboy63-libo oldboy]$ sed '2aoldboy' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    ============================================================================
    
    [root@oldboy63-libo oldboy]$ sed 'aoldboy' person.txt  person.txt 
    101,oldboy,CEO
    oldboy
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    oldboy
    104,yy,CFO
    oldboy
    105,feixue,CIO
    oldboy
    101,oldboy,CEO
    oldboy
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    oldboy
    104,yy,CFO
    oldboy
    105,feixue,CIO
    oldboy
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed '$aoldboy' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    oldboy
    
    在指定行前面添加信息
    [root@oldboy63-libo oldboy]$ sed '2ioldboy' person.txt 
    101,oldboy,CEO
    oldboy
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed 'ioldboy' person.txt 
    oldboy
    101,oldboy,CEO
    oldboy
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    oldboy
    104,yy,CFO
    oldboy
    105,feixue,CIO
    ============================================================================
    [root@oldboy63-libo oldboy]$ sed '1ioldboy' person.txt 
    oldboy
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    
    多行添加信息

    连续多行

    [root@oldboy63-libo oldboy]$ sed -e '2,4aoldboy' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    oldboy
    104,yy,CFO
    oldboy
    105,feixue,CIO
    

    不连续多行

    [root@oldboy63-libo oldboy]$ sed -e '2aoldboy' -e '4aoldboy' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    oldboy
    103,Alex,COO
    104,yy,CFO
    oldboy
    105,feixue,CIO
    

    直接添加多行内容

    [root@oldboy63-libo oldboy]$ sed '2aoldboy\noldgirl\noldbaby' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    oldboy
    oldgirl
    oldbaby
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    
    删除指定信息

    按行删除指定信息

    [root@oldboy63-libo oldboy]$ sed '4d' person.txt 
    101,oldboy,CEO
    102,zhaoyao,CTO
    103,Alex,COO
    105,feixue,CIO
    [root@oldboy63-libo oldboy]$ sed -r '/Alex|oldboy/d' person.txt 
    102,zhaoyao,CTO
    104,yy,CFO
    105,feixue,CIO
    

    删除/etc/service文件中注释和空行
    sed -r '/^$|^#d' /etc/services
    sed -rn '/^$|^#/!p' /etc/services

    替换操作

    sed -r '/IPADDR/s#(IP.*=)10.0.0.2#\110.0.0.201#g' /etc/sysconfig/network-scripts/ifcfg-eth0
    利用&实现后项应用前项正则匹配到的信息

    [root@oldboy63-libo oldboy]$ echo "123456"|sed 's#[0-9]\+#<&>#g'
    <123456>
    [root@oldboy63-libo oldboy]$ echo "123456"|sed -r 's#[0-9]{1}#<&>#g'
    <1><2><3><4><5><6>
    
    利用sed取出IP地址

    显示IP地址
    ip a s eth0
    ifconfig eth0
    筛除指定行
    ip a s etho0|sed -n '3p'
    取出IP地址

    [root@oldboy63-libo oldboy]$ ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)#\1#g'|sed -r 's#(.*)/24.$#\1#g'
    10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
    [root@oldboy63-libo oldboy]$ ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
    10.0.0.200
    
    利用sed获取文件属性权限数值
    [root@oldboy63-libo oldboy]$ stat /etc/hosts|sed -n '4p'|sed -r 's#^A.*\((.*)/-.*$#\1#g'
    权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
    

    相关文章

      网友评论

          本文标题:7月24日 系统正则符号和sed

          本文链接:https://www.haomeiwen.com/subject/hukfrctx.html