美文网首页
2019-06-19

2019-06-19

作者: 男子瀚 | 来源:发表于2019-06-19 14:11 被阅读0次

一. 三剑客sed命令

sed - stream editor for filtering and transforming text

          流编辑器工具(文件字符流进行处理编辑)

作用: 擅长对文件的行进行处理  修改编辑文件内容

语法:sed [参数] '条件 指令(如何处理)'  文件信息

            sed -n '/oldboy/p'  oldboy.txt

sed命令执行原理 (图)

      三剑客命令:按行处理文件信息

    sed命令操作实践

    sed命令能完成什么事情: 增    删    改    查 ( 处理文本文件  配置文件-sed  日志文件-grep/awk)

二.  如何查询信息:

1.  需求:查询单行信息:

          01. 将第3行信息进行显示

                 sed -n '3p' person.txt

          02. 将有oldboy的行进行显示

                  sed -n '/oldboy/p' person.txt

2.  需求:查多行信息       -n  取消默认输出            p  print  输出信息

    01. 将第3行~第5行信息进行显示  区间用到: ,

            sed -n '3,5p' person.txt

      02. 将oldboy ~ alex信息进行显示    --注意的是会显示匹配文件的一个贪婪性

      sed -n '/oldboy/,/Alex/p' person.txt

3. 只查看第3行和第5行内容

      sed -n '3p;5p' person.txt

    只查看有oldboy和alex信息

      sed -n '/oldboy/p;/Alex/p' person.txt

三.  如何删除文件信息

    01. 将第三行信息进行删除

          sed -i '3d' person.txt                -i  真实修改文件内容        d  delete 删除文件信息

    02. 将有oldboy信息的行进行删除       

          sed -i '/oldboy/d' person.txt  

    03. 将oldboy和Alex信息的行进行删除 

          方法一: sed '/oldboy/d;/Alex/d' person.txt

          方法二:sed -r '/oldboy|Alex/d' person.txt

四.  如何增加信息

    01. 在第3行后面增加新的一行  内容 oldboy62

          sed '3a oldboy62' person.txt          a  append 在指定条件行的下面添加信息

    02. 在第5行前面增加新的一行  内容 oldboy62

          sed '5i oldboy62' person.txt          i  insert 在指定条件行的上面添加信息

    03. 在第3行前面加oldboy62,同时在第5行后面加oldboy62

          sed -e '3ioldboy62' -e '5aoldboy62' person.txt      -e  识别多个指令信息,可以让多个指令同时执行

    04. 在文件最后一行后面,添加多行信息

          sed -e '$aoldboy62' person.txt     

          sed '$aoldboy62\noldboyedu62' person.txt

五. 替换修改文件内容:

    01. 将123456 信息 显示 为 <123456>

        方法1: echo 123456|sed -r 's#(.*)#<\1>#g'

          方法2:echo 123456|sed  's#.*#<&>#g'

          方法3:echo 123456|sed -r 's#([0-9]+)#<\1>#g'

    02. 将123456 信息 显示 为 <123><456>

          echo 123456|sed -r 's#([0-9]{3})#<\1>#g'

          echo 123456|sed -r 's#(.{3})#<\1>#g'

        03  . 将123456 信息 显示 为 <1><2><3><4><5><6>

          echo 123456|sed -r 's#([0-9])#<\1>#g'

          echo 123456|sed -r 's#([0-9]{1})#<\1>#g'

          echo 123456|sed -r 's#(.)#<\1>#g'

六.    修改文件内容: 

        使用-i参数问题:

    01. -i.bak 表示对源文件进行备份  -- i参数后面不能跟其他参数

        sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt

        查看: ll oldboy.txt*

    02. 在利用-i替换文件内容信息,-i参数和-n参数一定不能同时使用

        替换的错误方法

        sed -n '/Alex/s#COO#CEO#gp' person.txt

        sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt

        正确替换方法

        sed -i '/Alex/s#COO#CEO#g' person.txt

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

  方法一:

    find /oldboy -maxdepth 1 -type f -name "oldboy*.txt"|sed -r 's#(.*)txt#mv \1txt \1jpg#g'|bash

    方法二:

    [root@oldboyedu62.com.cn /oldboy# ls oldboy*.txt|xargs -n1|sed -r 's#(.*)txt#mv & \1jpg#g'

    方法三:利用rename

    #rename "修改文件名称什么信息" "修改成什么"  修改什么文件

    rename ".txt" ".jpg" oldboy*.txt

03. 取出文件权限数值信息

    方法一:

    stat /etc/hosts|sed -nr '4s#^A.*s: \((.*)/-.*$#\1#gp'

    stat /etc/hosts|sed -n '4s#^A.*s: (\(.*\)/-.*$#\1#gp'

    0644

    方法二:权限

      ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'

    ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'|tr "rwx-" "4210"

七. 特殊替换文件内容信息:

      sed -n '3s/#103/103/gp' person.txt

      sed -n '3s#\#103#103#gp' person.txt

八. 修改整行信息:

    sed '3coldboy62' person.txt      c  change 修改替换指定的整行信息 

九 . 取消空行不要显示

方法一:

    sed '/^$/d' person.txt

方法二:

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

十 . 扩展:利用sed命令显示文件行号信息

    sed '=' person.txt|xargs -n2

04. 课程知识总结

    1)掌握sed命令语法结构  sed 参数 '条件 指令' 文件信息 

      参数:

  -n  取消默认输出

  -i  真实修改文件内容

  -e  识别多个指令信息,可以让多个指令同时执行

  -r  识别扩展正则符号信息

      指令:

      p  print  输出信息

  d  delete 删除文件信息

  i  insert 在指定条件行的上面添加信息

  a  append 在指定条件行的下面添加信息

  s  substitute  取代==替换

  g  global 将所有匹配的信息都做替换(没有 将一行中第一个匹配的信息做替换)

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

相关文章

网友评论

      本文标题:2019-06-19

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