• Shell 基本概念 —— sed 命令

    背景

    做运维一年了,突然发现自己python和php写了不少。基本的shell却一直搁置没有系统性的去学习总结。 其实在日常工作中,能合理高效的使用shell会提高不少效率。这也是运维工程师必备的基本素质。所以这里决定把一些简单的shell知识点写下来备忘。本博文并没有什么技术含量,主要是用来总结与备忘的,众位求知者可绕行

    内容

    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    option 代表sed的编辑参数,常用的有以下几种:

    command 主要包括 [ n1[,n2] ]  function 。

    n1, n2 :不见得会存在,一般代表(选择进行动作的行数),举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则( 10,20[动作行为] )。

    function:

    典例:查看test.txt 文件中的第3行。

    接下来,我们逐个示范使用options来查看了解:

    1. sed的 a 新增

    典例1: 在第一行后面添加”add one”字符串

    $  sed ‘1a \add one’ test.txt

    典例2: 在第二行到第四行后面添加”add one”字符串

    sed ‘2,4a \add one’ test.txt

    sed ‘2,$a \add one’ test.txt

    典例3: 在含有first的行后面添加”add one” 字符串

    sed ‘/first/a \add one’ test.txt

    2. sed 的i插入

    i命令使用方法和a命令一样的,只不过是在匹配的行的前面插入字符串,所以直接将上面a命令的示例的a替换成i即可。

    3. sed 的c替换

    典例1: 将第2行的内容替换为”add one”字符串

    sed ‘2c \add one’ test.txt

    典例2:将第四行到最后一行的内容替换为”add one”字符串

    sed ‘2,$c \add one’ test.txt

    可以看出,其实还是和之前的a添加格式一模一样,只是功能变了而已。

    4. sed 的d删除

    典例1: 删除第二行到最后一行的内容。

    sed ‘2,$d ‘ test.txt

    典例2: 删除以ha开头,以day结尾的行。

    sed ‘/^ha.*day$/d’ test.txt

    5. sed 的s替换命令

    典例1: 将文件中的所有line替换成text。

    sed ‘s/line/text/g’ test.txt

    感觉和其他的都不太一样,s放在了前面,最后的g是global的意思,也就是全局替换,如果不加g,则只会替换本行的第一个line

    典例2:匹配以ha开始,以day结尾的行,然后再将该行中的happy替换成very happy。

    sed ‘/^ha.*day$/  s/happy/very happy/g’ test.txt

     

    参考:

    http://qifuguang.me/2015/09/21/sed命令详解/

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html