zoukankan      html  css  js  c++  java
  • sed命令

    sed命令

    1 sed

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

    1.1 sed作用

    擅长对文件的行进行处理,修改编辑文件的内容。

    1.2 语法

    sed [参数]	'条件 指令(如何处理)' 文件信息
    sed  -n		'/oldboy/p'		     oldboy.txt
    

    1.3 原理

    按行处理文件信息

    1.4 功能

    增加、删除、修改、查询 擅长处理文本文件,配置文件 grep/awk擅长日志文件
    以下命令环境条件:cat >person.txt<<EOF
                                101,oldboy,CEO
                                102,zhaoyao,CTO
                                103,Alex,COO
                                104,yy,CFO
                                105,feixue,CIO
                                3p
                                EOF

    1.4.1 查询功能

    查询单行信息:
    (1)将第3行信息进行显示:sed -n '3p' person.txt

    (2)将有oldboy的行进行显示:sed -n '/oldboy/p' person.txt

    查询多行信息:
    (1)将第3行~第5行信息进行显示:sed -n '3,5p' person.txt

    (2)将oldboy ~ alex信息进行显示:sed -n '/oldboy/,/Alex/p' person.txt

    (3)只查看第3行和第5行内容:sed -n '3p;5p' person.txt

    (4)只查看有oldboy和alex信息:sed -n '/oldboy/p;/Alex/p' person.txt

    1.4.2 删除功能

    (1)将第三行信息进行删除:sed -i '3d' person.txt

    sed '3d' person.txt

    加 -i 与不加 -i 的区别:
    加-i:表示是真的对硬盘中文件进行了编辑,所以会真正的删除。
    不加-i:表示是对内存中的信息进行了编辑,所以不会真正的删除硬盘中的信息。
    (2)将有oldboy信息的行进行删除:sed -i '/oldboy/d' person.txt

    sed '/oldboy/d' person.txt

    (3)将oldboy和Alex信息的行进行删除 :sed -ri.bak '/oldboy|Alex/d' person.txt

    -i.bak 表示对源文件进行备份 -- i参数后面不能跟其他参数
    sed '/oldboy/d;/Alex/d' person.txt

    1.4.3 增加功能

    (1)在第3行后面增加新的一行 内容 oldboy62:sed '3a oldboy62' person.txt

    真实修改:sed -i '3a oldboy62' person.txt

    (2)在第5行前面增加新的一行 内容 oldboy62:sed '5i oldboy62' person.txt

    真实修改:sed -i '5i oldboy62' person.txt

    (3)在第3行前面加oldboy62,同时在第5行后面加oldboy62:
    sed -e '3ioldboy62' -e '5aoldboy62' person.txt

    真实修改: sed -i -e '3ioldboy62' -e '5aoldboy62' person.txt

    (4)在文件最后一行后面,添加一行信息:sed -e '$aoldboy62' person.txt

    真实修改: sed -i -e '$aoldboy62' person.txt

    (5)在文件最后一行后面,添加多行信息: sed '$aoldboy62 oldboyedu62' person.txt

    $:以什么结尾 只能匹配文件内容,不能匹配名称。正则符号只能匹配文件内容,不能匹配文件名称 :换行符

    1.4.4 替换修改文件内容功能

    (1)将123456 信息 显示 为 <123456>
    ①:echo 123456|sed -r 's#(.)#<1>#g'

    ②:echo 123456|sed 's#.
    #<&>#g'

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

    (2)将123456 信息 显示 为 <123><456>
    ①:echo 123456|sed -r 's#([0-9]{3})#<1>#g'

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

    (3)将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'

    修改文件内容:
    (1)使用-i 参数问题
    -i.bak:表示对源文件进行备份 -i参数后面不能跟其他参数
    sed -ri.bak 's#(.*)#<1>#g' oldboy.txt

    (2)在利用-i替换参数文件内容信息,-i参数和-n参数一定不能同时使用
    替换错误使用方法:
    sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt

    在这里,-n -i一块使用,-i 确定了修改的内容,-n 取消了文件其它内容,只显示-i 执行后的内容。这样会导致文件内容的丢失。所以-n -i 不能同时使用。
    正取使用方法:
    sed -i '/Alex/s#COO#CEO#g' person.txt

    (2)批量修改文件扩展名称
    方法一:
    find /oldboy -maxdepth 1 -type f -name "oldboy.txt"|sed -r 's#(.)txt#mv 1txt 1jpg#g'|bash

    方法二:
    ls oldboy.txt|xargs -n1|sed -r 's#(.)txt#mv & 1jpg#g'

    方法三:利用rename 专业修改
    rename ".txt" ".jpg" oldboy*.txt

    (3)取出文件数值权限信息
    方法一:①stat /etc/hosts|sed -nr '4s#^A.s: ((.)/-.$#1#gp'

    stat /etc/hosts|sed -nr '4取出hosts文件第四行:Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    ②stat /etc/hosts|sed -n '4s#^A.
    s: ((.)/-.$#1#gp'

    方法二:
    ll /etc/hosts|sed -r 's#^-(.). 1.$#1#g'

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

    (4)特殊替换文件内容信息:
    ①sed -n '3s/#103/103/gp' person.txt

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

    (5)修改整行内容
    sed '3coldboy62' person.txt

    (6)取消空行不要显示
    方法一:sed '/^$/d' person.txt

    方法二:
    sed -n '/^$/!p' person.txt

    (7)利用sed命令显示文件行号信息
    sed '=' person.txt:显示行号

    sed '=' person.txt|xargs -n2

    1.5 总结

    1.5.1 参数

    -n 取消默认输出
    -i 真实修改文件内容
    -e 识别多个指令信息,可以让多个指令同时执行
    -r 识别扩展正则符号信息

    1.5.2 指令

    p print 输出信息
    d delete 删除文件信息
    i insert 在指定条件行的上面添加信息
    a append 在指定条件行的下面添加信息
    s substitute 取代==替换
    g global 将所有匹配的信息都做替换(没有 将一行中第一个匹配的信息做替换)
    c change 修改替换指定的整行信息

    1.5.3 sed命令执行流程

    这条路,你只管走,莫回头。 星光不问赶路人,时光不负有心人。 但愿你我都是赶路人,做得这个有心人。
  • 相关阅读:
    第一节:SpringMVC概述
    SpringMVC【目录】
    Windows 系统快速查看文件MD5
    (error) ERR wrong number of arguments for 'hmset' command
    hive使用遇到的问题 cannot recognize input
    Overleaf支持的部分中文字体预览
    Understanding and Improving Fast Adversarial Training
    Django2实战示例 第十三章 上线
    Django2实战示例 第十二章 创建API
    Django2实战示例 第十一章 渲染和缓存课程内容
  • 原文地址:https://www.cnblogs.com/sandshell/p/12624722.html
Copyright © 2011-2022 走看看