美文网首页
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