• 三剑客之sed


    三剑客之sed

    sed的执行过程

    #条件满足
    sed命令先将第一行内容读取到内存中-->判断这一行是否满足条件--->满足-->执行sed中的命令(s,d,i)-->输出到屏幕-->继续读取下一行直到文件最后
    #条件不满足
    sed命令先将第一行内容读取到内存中-->判断这一行是否满足条件--->不满足-->返回继续读取文件的内容
    

    sed命令的用法

    -n:取消默认输出
    -r:使sed支持扩展正则(| ())
    -i:确认修改
    -i.bak:自动备份
    

    sed命令之查询

    #查询单行
    [root@web02 oldboy]# sed -n '1p' person.txt 
    101,oldboy,CEO
    #查询连续行
    [root@web02 oldboy]# sed -n '1,3p' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    #查询多行
    [root@web02 oldboy]# sed -n '2p;5p' person.txt 
    102,zhangyao,CTO
    105,feixue,CIO
    #模糊查询
    [root@web02 oldboy]# sed -n '/yy/,/^105/p' person.txt 
    104,yy,CFO
    105,feixue,CIO
    #过虑多个字符串,使用-r来支持扩展正则
    [root@web02 oldboy]# sed -nr '/oldboy|yy/p' person.txt 
    101,oldboy,CEO
    104,yy,CFO
    

    sed命令之增加文件

    [root@web02 oldboy]# cat -A person.txt 
    101,oldboy,CEO$
    102,zhangyao,CTO$
    103,Alex,COO$
    104,yy,CFO$
    105,feixue,CIO$
    #a在什么之后增加单行
    [root@web02 oldboy]# sed '3a oldboy.com' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    oldboy.com
    104,yy,CFO
    105,feixue,CIO
    #i:在什么之前增加单行
    [root@web02 oldboy]# sed '3i oldboy.com' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    oldboy.com
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    #增加多行
    [root@web02 oldboy]# sed '4a odlboy
    helloaaaa' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    odlboy
    helloaaa
    105,feixue,CIO
    

    sed命令之删除

    #删除单行
    [root@web02 oldboy]# sed '1d' person.txt 
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    #删除连续行
    [root@web02 oldboy]# sed '1,3d' person.txt 
    104,yy,CFO
    105,feixue,CIO
    #删除多行
    [root@web02 oldboy]# sed '1d;3d' person.txt 
    102,zhangyao,CTO
    104,yy,CFO
    105,feixue,CIO
    #使用过滤来删除
    [root@web02 oldboy]# sed '/oldboy/d' person.txt 
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    #使用正则删除
    [root@web02 oldboy]# sed -r '/oldboy|yy/d' person.txt 
    102,zhangyao,CTO
    103,Alex,COO
    105,feixue,CIO
    #删除最后一行,$表示最后一行
    [root@web02 oldboy]# sed '$d' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    
    企业案例:不显示文件中的空行
    [root@web02 oldboy]# cat -A person.txt 
    101,oldboy,CEO$
    $
    102,zhangyao,CTO$
    $
    103,Alex,COO$
    $
    104,yy,CFO$
    105,feixue,CIO$
    #不显示空行,!表示取反
    [root@web02 oldboy]# sed -n '/^$/!p' person.txt 
    101,oldboy,CEO
    102,zhangyao,CTO
    103,Alex,COO
    104,yy,CFO
    105,feixue,CIO
    #删除除最后一行以后的内容
    [root@web02 oldboy]# sed '$!d' person.txt 
    105,feixue,CIO
    

    sed命令之替换

    #s表示替换,g表示全局替换
    [root@web02 oldboy]# sed 's#oldboy#oldgirl#g' person.txt 
    101,oldgirl,CEO
    
    102,zhangyao,CTO
    
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    #i表示确认修改,i.bak表示自动备份
    [root@web02 oldboy]# sed -i.bak 's#oldboy#oldgirl#g' person.txt 
    [root@web02 oldboy]# ls
    person.txt  person.txt.bak
    

    sed命令之变量替换

    [root@web02 oldboy]# x=oldboy
    [root@web02 oldboy]# y=oldgril
    #此处无变化是因为单引号与又引号的区别,单引号是所见所得,不会解析当中的特殊符号,双引号和单引号一样,但是会解析当中的特殊符号
    [root@web02 oldboy]# sed 's#$x#$y#g' person.txt.bak 
    101,oldboy,CEO
    
    102,zhangyao,CTO
    
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    [root@web02 oldboy]# sed "s#$x#$y#g" person.txt.bak 
    101,oldgril,CEO
    
    102,zhangyao,CTO
    
    103,Alex,COO
    
    104,yy,CFO
    105,feixue,CIO
    [root@web02 oldboy]# 
    

    sed命令之反向引用

    ()  扩展正则表达式  在sed中作用,能够记忆它包含的一段正则表达式,并可以通过1 2 3 ... 9 调取出来
    
  • 相关阅读:
    SQLAlchemy(2):多表操作 & 连接方式及原生SQL
    SQLAlchemy(1):单表操作
    requests模块发送POST请求
    Flask(4):wtforms组件 & 数据库连接池 DBUtils
    爬虫(1):requests模块
    socketserver模块使用 & websocket
    Flask基础(3):session、flash、特殊装饰器、蓝图、路由正则匹配、上下文管理 & flask-session
    MySQL:视图、触发器、存储过程、事务
    UICollectionViewLayout
    iOS7自定义statusbar和navigationbar的若干问题
  • 原文地址:https://www.cnblogs.com/yjiu1990/p/10336254.html
Copyright © 2020-2023  润新知