• shell编程——sed用法


    一、sed格式:

    sed 参数 '正则表达式' 文件名

    演示文件的内容:

    [root@localhost ~]# cat test.sh 
    #!/bin/bash
    第一行 12345!
    第二行 23456@
    第三行 34567#
    第四行 45678$
    第五行 56789%

    sed默认是打印出文件内容的,不加正则表达式时会把文件内容全部打印出来,跟cat功能类似:

    [root@localhost ~]# sed '' test.sh
    #!/bin/bash
    第一行 12345!
    第二行 23456@
    第三行 34567#
    第四行 45678$
    第五行 56789%
    

    我们加-n参数取消sed的默认打印功能,在正则表达式中加p表示打印匹配表达式的内容,这里为空表示匹配所有,结果会把整个文件打印出来:

    [root@localhost ~]# sed -n '' test.sh 
    [root@localhost ~]# sed -n 'p' test.sh
    #!/bin/bash
    第一行 12345!
    第二行 23456@
    第三行 34567#
    第四行 45678$
    第五行 56789%
    

    现在我们打印第一行:

    [root@localhost ~]# sed -n '1p' test.sh
    #!/bin/bash

    从第二行开始打印到四行,#!/bin/bash也算是一行

    [root@localhost ~]# sed -n '2,4p' test.sh
    第一行 12345!
    第二行 23456@
    第三行 34567#

    把包含234的打印出来:

    [root@localhost ~]# sed -n '/234/p' test.sh 
    第一行 12345!
    第二行 23456@
    

    当匹配内容里有特殊字符时需要加屏蔽其特殊含义

    [root@localhost ~]# sed -n '/$/p' test.sh 
    第四行 45678$

    注意:当匹配不到时会把整个文件打印出来

    [root@localhost ~]# sed -n '/$/p' test.sh 
    #!/bin/bash
    第一行 12345!
    第二行 23456@
    第三行 34567#
    第四行 45678$
    第五行 56789%
    

    在第三行里查询包含字符“二”的内容,可用来判断该行是否存在该字符串

    [root@localhost ~]# sed -n '/二/,3p'  test.sh 
    第二行 23456@

    把除了第一、二行外的其他内容打印出来:

    [root@localhost ~]# sed -n '1,2!p' test.sh 
    第二行 23456@
    第三行 34567#
    第四行 45678$
    第五行 56789%

    经测试一个正则表达式中最多只能排除两行,三行就无效:

    [root@localhost ~]# sed -n '1,2,4!p' test.sh 
    sed:-e 表达式 #1,字符 4:未知的命令:“,”

    二、现在介绍下在正则表达式中常用的编辑命令:

    p 打印匹配行
    
    = 显示文件行号
    
    a  在定位行号后附加新文本信息
    
    i  在定位行号后插入新文本信息
    
    d 删除定位行
    
    c  用新文本替换定位文本
    
    s 使用替换模式替换相应模式
    
    r 从另一个文件中读文本
    
    w 写文本到一个文件
    
    q 第一个模式匹配完成后推出或立即推出
    
    l 显示与八进制A S C I I代码等价的控制字符
    
    { } 在定位行执行的命令组
    
    n 从另一个文件中读文本下一行,并附加在下一行
    
    g 将模式2粘贴到/pattern n/
    
    y 传送字符
    
    n 延续到下一输入行;允许跨行的模式匹配语句
    博客同步地址:http://blog.csdn.net/u010917843
  • 相关阅读:
    上传图片,将图片保存在腾讯云(2种方式)
    由ping所引发的思考~
    php面试上机题(2018-3-3)
    【八】jqeury之click事件[添加及删除数据]
    【七】jquery之属性attr、 removeAttr、prop[全选全不选及反选]
    【六】jquery之HTML代码/文本/值[下拉列表框、多选框、单选框的选中]
    【五】jquery之事件(focus事件与blur事件)[提示语的出现及消失时机]
    小白懂算法之基数排序
    mysql_sql199语法介绍
    Python基本编程快速入门
  • 原文地址:https://www.cnblogs.com/dengtr/p/5027372.html
Copyright © 2020-2023  润新知