sed命令详解及demo

sed:修改替换文件内容,擅长对文件中的行进行操作

字符流编辑工具(行编辑工具)==按照每行中的字符进行处理操作

PS:全屏编辑工具 vi/vim

sed命令作用说明
  • 擅长对行进行操作

  • 擅长将文件的内容信息进行修改调整/删除

  • 具体功能作用:增删改查

语法信息:
命令 参数  条件-处理    处理文件信息

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

条件+处理=指令
执行原理:把所有内容都一行一行进行筛选通过条件后的放入模式空间。所有行都筛选完成后将模式空间里的内容再拿出来
  • 参数

    参数解释
    n只打印出搜索的内容
    i修改文件生效(将内存中的信息覆盖到磁盘中),不要将n和i同时使用,否则会将文件内容只变成了修改的那一行内容。另外参数i要写在别的参数前面,后面有东西就会生成源文件的一个备份文件
    e多次执行sed命令连接
    r识别扩展正则符号
  • 处理(暂存区默认有一个空行)

    参数解释
    H把模式空间的内容追加到暂存区
    h把模式空间的内容重定向到暂存区
    G取出暂存区的内容,将其复制到模式空间,追加该处的原有内容
    g取出暂存区的内容,将其复制到模式空间,覆盖该处的原有内容
    i在搜索后内容的上一行插入内容
    a在搜索后内容的下一行插入内容
    c在搜索后内容的行进行覆盖内容
    w在搜索后内容的行进行写入新文件
    d删除行
    {n;d}匹配某一行然后删除它的下一行
    p输出信息
批量修改文件后缀名
ls old*.txt | sed -r 's#(.*)txt#mv & \1jpg#g' | bash                                                                    

&在这里是代表(.*)txt
查看搜索数据
  • 如何进行过滤信息

    #p:print. /筛选的内容/  筛选结果将文件原内容也展示出来了,筛选的结果是又显示一次
    sed "/oldboy/p" /oldboy.txt
    
    #只想要显示结果 需要加 -n   n:no
    sed -n "/oldboy/p" /oldboy.txt
    
  • 显示搜索的一行内容

    sed -n '/old/p' 1.txt
    
  • 显示两个搜索之间的范围内容

    sed -n '/old/,/alex/p' 1.txt
    将old到alex之间的所有行输出
    
  • 显示多个搜索的单行内容

    #将有old和alex的行输出出来
    sed -n '/old/p;/alex/p' 1.txt
    
  • 打印第几行内容

    sed -n '2p' 1.txt
    
  • 打印多行

    sed -n '1,3p' 1.txt
    
  • 打印IP

    ip a s eth0 | sed -rn '3s#^.*net (.*)/24.*#\1#gp'
    
    将第三行内容进行修改
    修改规则放在3和p之间
    
添加数据
  • 在第几行的下一行添加内容

    sed '3a sss' 1.txt
    在第三行后面添加一行sss
    
  • 在第几行的上一行添加内容

    sed '3i sss' 1.txt
    
  • 将匹配的行写入新文件

    sed '/aaa/w 新文件名' 1.txt
    
  • 添加多行信息

    sed '$a 100\n101' 1.txt
    在最后一行的后面添加一行100再添加一行101
    
修改数据
  • 如果替换的内容里有#

    sed 's/#/*/g' 1.txt
    
  • 修改文件内容

    #将所有的oldboy信息修改为python
    vim 替换: :%s#oldboy#python#g
    sed 替换: sed 's#oldboy#python#g' /test.txt
    但不是真正的替换,加上-i是真正的修改
    sed -i 's#oldboy#python#g' /test.txt
    
  • 既修改也备份,先备份源文件后修改源文件

    sed -i.bak '/s#123#456#g/' 1.txt
    
  • 修改第几行的内容

    sed -i '4c www' 1.txt
    将第四行内容修改为www
    
  • 正则匹配内容然后匹配的行进行修改

    [root@pert ~]# cat 1.txt 
    123
    
    456
    
    7289
    66
    
    77
    [root@pert ~]# sed '/7/c +' 1.txt 
    123
    
    456
    
    +
    66
    
    +
    
    将有7的行都改为+
    
删除数据
  • 删除单行信息

    sed '4d' 1.txt
    
  • 删除多行信息

    sed '2,4d' 1.txt 
    
  • 删除第三行和第六行

    sed '3d;6d' 1.txt
    
  • 取消空行显示

    sed -r '/^$/d' 1.txt
    或
    sed -n '/./p' 1.txt
    或
    sed -n '/^$/!p' 1.txt                
    
  • 除了第三行其他全部删除

    sed '3!d' 1.txt
    
  • 删除并修改数据

    sed '1,3d' 1.txt | sed 's#72#99#g' > 2.txt
    删除1.txt第一到第三行数据
    然后将72替换为99
    然后将内容写入2.txt
    上面的删除修改操作不会改变原1.txt内容
    或
    sed -e '1,3d' -e 's#72#99#g' 1.txt > 2.txt
    加上-e 就是 连续操作
    先删除后修改然后写入
    
  • 正则匹配数据行进行删除

    sed '/123/d' 1.txt
    
  • 匹配某一行然后删除它的下一行

    sed '/root/{n;d}' 1.txt
    将匹配到的root行的下一行进行删除
    
暂存空间和模式空间(暂存空间默认有一行空行,追加的时候会有个多的空行)
  • 将第一行内容追加在暂存空间中,然后把第一行内容在第三行进行追加

    [root@pert ~]# sed '1H;3G' 1.txt 
    
  • 将第一行内容追加在暂存空间中,然后把第三行进行修改为第一行内容

    [root@pert ~]# sed '1H;3g' 1.txt 
    
  • 将第一行内容重定向到暂存区,暂存区原有的一个空行就没有了只有文件第一行的内容,然后将其覆盖到最后一行

    [root@pert ~]# sed '1h;$g' 1.txt 
    
  • 将第一行内容重定向到暂存区,暂存区原有的一个空行就没有了只有文件第一行的内容,然后将其覆盖到最后一行。并且文件的第一行内容也被删除了

    [root@pert ~]# sed '1{h;d};$g' 1.txt 
    
  • 降低一行内容重定向到暂存区,然后从第四行开始到最后一行全部都替换为第一行的内容

    [root@pert ~]# sed '1h;4,$g' 1.txt 
    123
    
    456
    123
    123
    123
    123
    123
    
  • 降低一行内容重定向到暂存区,然后从第四行开始到最后一行后面都追加一行第一行的内容

    [root@pert ~]# sed '1h;4,$G' 1.txt 
    123
    
    456
    
    123
    7289
    123
    66
    123
    
    123
    77
    123
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值