• linux sed 命令常见用法


    在 linux 系统中,有三个强大的文本分析处理工具:grep  sed  awk,其中:

    grep   用于搜索文本内容      =>     linux grep 命令常见用法

    sed    用于编辑文本内容       =>     linux sed  命令常见用法

    awk   用于处理和生成报表    =>     linux awk 命令常见用法

     

    这几个命令用来对数据流进行处理的,其工作原理都是将文件内容逐行读入,逐行处理。

    sed 的全称是 “stream editor” (数据流编辑器),从这个名字也可以看出,sed 是以数据流的方式对文本内容进行编辑的,而最常见的用法就是对文本中的特定字符串进行替换或者删除,下面结合实例简单介绍 sed 命令的常见用法:

    假设文件 fin.txt 中的内容如下:

    hello Jobs
    hello Pony hello Jack, hi Jack

    1. 把每一行中的 Jack 替换成 Mark

    sed  's/Jack/Mark/'  fin.txt
    >> hello Jobs hello Pony hello Mark, hi Jack

    sed 命令一般是写在单引号内,引号内开头的 s 表示替换(substitute),

    需要注意的是,在默认情况下,sed 只会替换每行中匹配到的第一个字符串,所以上面例子中最后一行的第二个 Jack 没有被替换,如果希望替换每一行中所有匹配到的字符串,需加在命令末尾上选项 g,比如:

    sed  's/Jack/Mark/g'  fin.txt
    >>
    hello Jobs
    hello Pony
    hello Mark, hi Mark

    注意这条命令并不会修改文件 fin.txt 的内容,只是将文件中的每一行读入缓存,执行替换,然后输出到屏幕,文件内容并没有发生改变。

    如果希望直接修改文件内容,可加上选项 “ -i ”

    sed -i 's/Jack/Mark/g' fin.txt

    2. 将 2~3 行中的 hello 替换成 hey

    sed  '2,3s/hello/hey/g'  fin.txt
    >>
    hello Jobs
    hey   Pony
    hey   Jack,  hi Jack

    这条命令开头的 2,3 表示仅在第 2 至第 3 行执行替换

     

    3. 找出包含字符 Pony 的那些行,将这些行中的 hello 替换成 hey

    sed  '/Pony/s/hello/hey/g'  fin.txt
    >>
    hello Jobs
    hey   Pony
    hello Jack, hi Jack

    这里的 Pony 是正则表达式,所以需要用 // 括起来

     

    4. 删除 2~3 行

    sed  '2,3d'  fin.txt
    >>
    hello Jobs

    命令中的 d 表示删除(delete),执行之后第 2~3 行就被删除了,仅剩下第一行

    5. 删除包含字符串 Pony 的行

    sed  '/Pony/d'  fin.txt
    >>
    hello Jobs
    hello Jack, hi Jack

    这里的 Pony 也是正则表达式,所以用 // 括起来了

    6. 删除空白行

    sed  '/^$/d'  fin.txt

    这里的 ^ 匹配一行的开头, $ 匹配一行的结尾,所以 /^$/ 就表示一行的开头和结尾之间没有任何内容,也就是空白行;

    注意有时候有些空白行是包含空格的,这种情况就需要写成:

    sed  '/^s*$/d'  fin.txt

    其中 s 表示空格, 星号 * 表示前面的字符重复 0 次或多次,所以这种写法可以匹配那些包含任意个空格的空白行

     

    7. 删除不包含字符 Pony 的行

    sed  '/Pony/!d'  fin.txt

    这里的感叹号 ! 表示反选,也就是选择那些不符合正则表达式 /Pony/ 的行, 右斜杠表示转义, 因为在有些系统下 ! 会被识别成其他的意思

     

    8. 在指定某一行的前面或者后面添加一行

    sed -i '1iwelcome'  fin.txt
    >>
    welcome
    hello Jobs
    hello Pony
    hello Jack,  hi Jack

     这里的 1 表示第一行, i 表示在这一行前面添加一行,如果要在第一行后面添加一行,则用字母 a :

    sed -i  '1awelcome'  fin.txt

    字母 a 是 append ,在后面添加一行

    字母 i  是 insert, 在前面添加一行

    9. 在匹配行的前面或者后面添加一行

    sed -i  '/Pony/awelcome'  fin.txt
    >>
    hello Jobs
    hello Pony
    welcome
    hello Jack,  hi Jack

     同样,在后面添加一行用字母 a,在前面添加一行用字母 i

    sed -i  '/Pony/iwelcome'  fin.txt

    以上只是 sed 的常见用法,sed 的用法其实还有很多,

    如果希望深入了解,建议参考相关书籍或者直接访问 GNU sed 网站:

     http://www.gnu.org/software/sed/manual/sed.html

     

     

     

     

    |--------------------------------------|

      

  • 相关阅读:
    HTML5 postMessage 和 onmessage API 详细应用
    layerX
    HTML5中createPattern()
    HTML5中lineCap端点样式遇到closePath()
    [转]Modernizr的介绍和使用
    HTML5学习之路
    javascript选取文档元素
    ie不支持getElementsByClassName的解决办法
    document.images、document.forms、doucument.links——>HTMLCollection
    JavaScript 参考手册——javascript本地和内置对象、BOM、DOM
  • 原文地址:https://www.cnblogs.com/xiaoxie2014/p/12911241.html
Copyright © 2020-2023  润新知