• 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命令执行流程

    这条路,你只管走,莫回头。 星光不问赶路人,时光不负有心人。 但愿你我都是赶路人,做得这个有心人。
  • 相关阅读:
    psi
    firefox修改语言
    automapper
    堆喷图解
    脱壳系列_0_FSG壳_详细版
    脱壳系列_1_UPX壳_详细版
    算法01-最大子数组详解
    逆向MFC程序
    如何执行shell命令
    Unity之流光效果
  • 原文地址:https://www.cnblogs.com/sandshell/p/12624722.html
Copyright © 2020-2023  润新知