zoukankan      html  css  js  c++  java
  • Linux sed进阶

    一、多行命令
    在使用sed编辑器的基本命令时,所有的sed编辑器命令都是对单行数据执行操作。sed编辑器也可以对多行数据进行处理,包含了3个可用来处理多行文本的特殊命令。
    1》N:将数据流中的下一行加进来创建一个多行组来处理。
    2》D:删除多行组中的一行。
    3》P:打印钓竿组中的一行。
    1.单选的next命令
    小写n命令会告诉sed编辑器移动到数据流下一文本行,而不用重新回到命令的最开始再执行一遍。通常sed编辑器会在移动到数据流中的下一文本行前,在这行上执行所有定义好的命令。
    $ cat data4
    This is the header line

    This is data line

    This is the last line
    $ sed '/header/{n;d}' data4
    This is the header line
    This is data line

    This is the last line
    2.合并文本行
    单行next命令会将数据流中的下一文本行移动到sed编辑器的工作空间(称为模式空间)。多行版本的next命令(用大写N)会将下一文本行加到已经在模式空间中的文本上。
    这样的作用是将数据流中的两个文本行合并到同一个模式空间。文本行仍然用换行符分隔,但sed编辑器现在会将两行文本当成一行来处理。
    $ cat data2
    line1
    line2
    line3
    line4
    $ sed '/1/{N;s/\n/ /}' data2
    line1 line2
    line3
    line4
    3.多行删除命令
    $ sed '/^$/{N;/data/D}' data4
    This is the header line
    This is data line

    This is the last line
    说明:sed编辑器脚本会查找空白行,如果找到了,则N命令,使下一文本行添加到模式空间。如果新的模式 空间中含有单词data,则D命令会删除模式空间中的前一行。
    4.多行打印命令
    多行打印(print)命令P沿用了同样的方法。它只打印多行模式空间中的第一行。这包括模式空间中直到换行符的所有字符。当用-n选项来阻止脚本输出时,它和显示文本的单行p命令的用法大同小异:
    $ sed -n 'N;/head/p' data4
    This is the header line
    《空行》
    二、保持空间
    模式空间(pattern space)是一块活动缓冲区,在sed编辑器执行命令时,它会保存sed编辑器要检验的文本。但它并不是sed编辑器保存文本的唯一空间。
    sed编辑器还利用了另一块缓冲区域,称做保持空间(hold space)。可以在处理模式空间中其他行时用保持空间来临时保存一些行。有5条命令用来保持空间。
    h     将模式空间复制到保持空间     
    H     将模式空间附加到保持空间
    g     将保持空间复制到模式空间
    G     将保持空间附加到模式空间
    x     交换模式空间和保持空间的内容
     
    $ sed -n '/1/{
    > h
    > p
    > n
    > p
    > g
    > p
    > }' data2
    line1
    line2
    line1
    三、排除命令
    感叹号命令(!)用来排除(negate)命令,也就是让原来会起作用的命令不起作用。
    $ sed -n '/1/!p' data2
    line2
    line3
    line4
    四、改变流
    通常,sed编辑器会从脚本的顶部开始执行命令并一直处理到脚本的结尾(D命令是个例外,它会强制sed编辑器返回到脚本的顶部,而不是读取新的行)。sed编辑器提供了一个方法来改变命令脚本的流,生成的结果类似于结构化编辑环境的结果。
    1.跳转
    跳转(branch)命令b的格式如下:
    [address]b [label]
    address参数决定了哪行或哪些行的数据会触发跳转命令。label参数定义了要跳转到的位置。如果没有加label参数,跳转命令会跳转到脚本的结尾:
    $ sed '{2,3b; s/line/LINE/}' data2
    LINE1
    line2
    line3
    LINE4
    2.测试
    如果替换命令成功匹配并替换了一个模式,测试命令就会跳转到指定的标签。如果替换命令未能匹配指定的模式,测试命令就不会跳转。
    [address]t [label]
    跟跳转命令一样,在没有指定标签的情况下,如果没有测试成功,sed会跳转到脚本的结尾。
    $ sed '{
    s/1/1 match/
    t
    s/line/no match /
    }' data2
    line1 match
    no match 2
    no match 3
    no match 4
  • 相关阅读:
    对 Sea.js 进行配置 seajs.config
    jquery 设置style:display
    Js获取当前日期时间及其它操作
    2.4 js数组与字符串的转换 > 我的程序猿之路:第十四章
    2.3 js刷新页面所有 > 我的程序猿之路:第十三章
    2.2 HTML/JSP中控制按钮的显示和隐藏与单页面多列表 > 我的程序猿之路:第十二章
    2.1 字符串替换字符或字符设置为空 > 我的程序猿之路:第十一章
    1.9 23种设计模式之单例模式详情 > 我的程序猿之路:第九章
    1.8 Oracle 登陆时报错信息:无监听程序 > 我的程序猿之路:第八章
    1.7 Oracle 11g )impdp(数据泵)--导入dmp文件(全过程) > 我的程序猿之路:第七章
  • 原文地址:https://www.cnblogs.com/sinaxyz/p/2822405.html
Copyright © 2011-2022 走看看