• Shell:sed流编辑器


    转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html

    sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓。它可以完美的配合正则表达式(注意是正则表达式哈,不是通配符和字符串模板)
    *********************************************************************************************
    命令格式
    sed命令的格式如下:sed option script file,option如下:
    (1)-e script:在处理输入时,将script中指定的命令添加到运行的命令中,实际上就是使用多个选项;
    image
    (2)-f file:在处理输入时,将file中指定的命令添加到运行的命令中;
    image
    (3)-n:不为每个命令生成输出,等待print来输出;
    (4)-i: 将替换结果用于原文件
    image
    *********************************************************************************************
    替换字符s/pattern/replace/flags
    替换文本内容,有4种可用的flags:
    (1)默认是替换第一个匹配的字符;
    (2)数字,表明新文本将替换第几处模式匹配的地方;
    (3)g,表明替换所有的地方;
    (4)p,表明原来的行内容要打印出来;
    (5)w file,将替换结果写入原文件。
    image
    ***************************************************************************************
    移除字符/pattern/d 移除pattern
    很简单的移除空白行:
    image
    ***************************************************************************************
    使用地址
    默认情况下,sed编辑器中使用的命令会作用与文本的所有行,如果只想将命令作用域特定某行,必须使用行寻址。在sed编辑器中有两种形式的行寻址:
    (1)行的数字范围
    (2)用文本模式来过滤出某些行
    两种方法都使用相同的格式来指定地址:[address]command
    ===================================================================
    数字方式的行寻址
    当使用数字方式的行寻址时,可以用它们在文本流中的行位置来引用行。sed会将第一行分配为1,后面按顺序为新行分配行号。
    -------------------------------
    测试文件内容:
    image
    测试的命令如下:
    image
    注意两点:
    1n,m表示的是nm
    2$表示的是结尾的行,2$表示从第二行到结尾
    ===============================================================================
    文本模式过滤器
    sed编辑器允许指定文本模式来过滤出命令要作用的行,格式如下:/pattern/command
    image
    很容易看懂,/2/用来匹配出现2的行,然后对该行作用命令s/chen/jiang/
    ================================================================================
    组合命令
    使用{}将多条命令组合在一起,可以在单行上执行多条命令。
    image
    ****************************************************************************************
    删除行
    删除命令d名副其实,它会删除匹配指定寻址模式的所有行。
    ===============================================================================
    (1)删除指定范围行
    image
    (2)删除匹配行
    image
    ********************************************************************************************
    插入和附加文本
    (1)插入(insert命令i会在指定行的前面增加一个新行;
    (2)追加(append命令a会在指定行的后面增加一个新行;
    不能在单个命令上使用这两条命令,必须指定是要将行插入还是附加到另一行,格式如下:
    sed '[address]command new line'
    =========================================================
    image
    如果更加复杂的匹配如下:
    image
    ***********************************************************************************************
    修改行
    修改允许修改数据中整行文本的内容,和插入附加的机制一样,如下:
    image
    ***********************************************************************************************
    字符映射
    转换(y)命令是唯一可以处理单个字符的sed编辑命令。转换命令的格式如下:
    [address]y/inchars/outchars/
    转换命令会对inchars和outchars值进行一对一的映射。
    image
    **********************************************************************************************
    回顾打印
    有三种方式来打印数据流中的信息:
    (1)p:打印文本行
    image
    ===============================================================================
    (2)=:打印行号
    image
    ===============================================================================
    (3)l:列出行
    列出命令l允许打印数据流中的文本和不可打印的ASCII字符。
    *******************************************************************************************
    多行命令
    多行命令允许你跨越多行来执行特定的操作。sed编辑器包含了3个可用来处理多行文本的特殊命令。
    (1)N:将数据流中的下一行加进来创建一个多行组的处理;
    (2)D:删除多行组中的一行;
    (3)P:打印多行组中的一行。
    ==============================================================================
    next命令
    ------------------------------
    单行next
    小写n会告诉sed移动到数据流的下一行文本,而不用回到命令最开始再执行一遍。可以来感受下下面的区别。
    image
    ================================================================================
    合并文本行
    ===============================================================================
    (6)& 代表已匹配的字符串
    image
    ================================================================================
    (7)子串匹配标记 (pattern) ,非常的重要
    image
    两个(pattern)之间需要空格 这个非常的重要,可以直接忽略一部分而只选择其中某一部分
    ===============================================================================
    ================================================================================
    (9)引用 当使用变量是用双引号
    image

  • 相关阅读:
    Python中的模块与包
    Mac eclipse找不到source的解决办法
    Git常用命令
    MiniCrowler
    九度题库(所有题目整理,适合计算机考研和面试的人用)
    gtest 安装
    计算广告的相关学习资源
    使用python pylab库 画线
    3到6年的.NETer应该掌握哪些知识?
    迭代器模式的一种应用场景以及C#对于迭代器的内置支持
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3524494.html
Copyright © 2020-2023  润新知