当前位置: 首页 > news >正文

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
    

相关文章:

  • Allegro关闭线段显示不连续效果操作指导
  • 【408篇】C语言笔记-第十五章( 考研必会的查找算法考研真题实战)
  • 【排序】详细聊聊归并排序(含非递归)
  • kafka单条消息过大导致线上OOM,运维连夜跑路了!
  • ValidateCode验证码的使用详解(初学看完都会用)
  • 肝了一周总结的SpringBoot常用注解大全,一目了然!
  • 无线电信号密钥WiFi完整版学习教程
  • Linux----paste命令使用详解
  • 【LSTM时序预测】基于灰狼算法优化长短时记忆网络GWO-LSTM实现风电功率预测附Matlab代码
  • 语音识别芯片LD3320介绍
  • Java的List之坑系列--Collections#unmodifiableList仍然可变
  • 我的一周年创作纪念日
  • idea中推送本地仓库和远程仓库后代码回退
  • Ultra-high Resolution Image Segmentation via Locality-aware Context Fusion
  • Windows取证——数据恢复(Fat32文件系统和NTFS文件系统)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 3.7、@ResponseBody 和 @RestController
  • Angular Elements 及其运作原理
  • CSS相对定位
  • export和import的用法总结
  • github指令
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • PHP面试之三:MySQL数据库
  • 阿里云Kubernetes容器服务上体验Knative
  • 动态规划入门(以爬楼梯为例)
  • 检测对象或数组
  • 前嗅ForeSpider中数据浏览界面介绍
  • 小程序 setData 学问多
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ionic入门之数据绑定显示-1
  • #define与typedef区别
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • %@ page import=%的用法
  • (1)Nginx简介和安装教程
  • (day 12)JavaScript学习笔记(数组3)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)学习JVM —— 垃圾回收机制
  • (简单) HDU 2612 Find a way,BFS。
  • (三)mysql_MYSQL(三)
  • (四)JPA - JQPL 实现增删改查
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)IOS中获取各种文件的目录路径的方法
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET CLR基本术语
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net Memory Profiler的使用举例
  • .NET 依赖注入和配置系统
  • .Net 知识杂记
  • .NET4.0并行计算技术基础(1)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @private @protected @public