zoukankan      html  css  js  c++  java
  • linux sed 命令

    sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。

    首先谈一下sed常用的常用格式为:sed[选项] [动作]

    常用选项:

      -n:使用安静(silent)模式。在一般sed的用法中,所有崽子STDIN的数据一般都会会被列出到终端上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。

      -e:直接在命令列模式上进行sed的动作编辑。

      -f:直接将sed的动作写在一个文件内,-f filename则可以运行filename内的sed动作。

      -r:sed的动作支持是延伸性正规表示法的语法。(默认是正规表示法语法)。

       -i:直接修改读取的文件内容,而不是输出到终端。

    function

      a:新增行,a的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)。

      c:取代行,c的后面可以接字串,这些字串可以取代n1,n2之间的行。

      d:删除行,因为是删除,所以d后面通常不接任何参数,直接删除地址表示的行。

      i:插入行,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)。

      p:列印,亦即将某个选项的数据印出。通常p会与参数sed -n一起运行。

      s:替换,可以直接进行替换的工作,通常这个s的动作可以搭配正规表示法,例如1,20s/old/new/g一般是替换符合条件的字符串而不是整行。

    一般function的前面会有一个地址的限制。例如[地址] function,表示我们的动作要操作的行。下面我们通过具体的离职直观的看看sed的使用方法。

    // test.txt  内容如下

    11 aa

    22 bb

    33 cc

    44 dd

    55 2e

    删除行(不替换文件,只是打印到控制台上面)

    sed '1,2d' test.txt  表示删除第1行到第2行的内容。

    sed '1,$d' test.txt  表示删除第1行到最后一行的内容。

    sed '/2/d' test.txt  表示删除包含2的所有行。

    sed '/^2/d' text.txt  表示删除以2开头的所有行。

    新增行(不替换文件,只是打印到控制台上面)

    sed '1a hello world' text.txt  表示在第1行的后面添加一行,添加的内容就是"hello world"。

    sed '1i hello world' text.txt  表示在第1一行的前面添加一行,添加的内容是"hello world"。

    替换行(不替换文件,只是打印到控制台上面)

    sed '1c hello world' text.txt  表示将第1行的内容替换为"hello world"。

    sed '/^2/c hello world' text.txt  表示将以2开头的行全部替换为"hello world"。

    替换部分字符串而不是整行(不替换文件,只是打印到控制台上面)

    sed中除了上面的命令是针对证行进行操作的之外,还提供一个替换明明,该命令对某一行中的部分字符串进行操作,下面举一个简单的例子,还是同样的文本内容,执行下面的命令:

    sed 's/aa/AA/' text.txt  表示将文件中的aa替换为AA。s/待替换的字符串/新字符串/。这里只置换每一行遇到的第一个aa。

    sed 's/aa/AA/g' text.txt  表示将文件中的aa替换为AA,加入g选项之后,表示为全局替换。

    sed '1s/aa/AA/g' text.txt  表示将文件中的第1行的aa进行替换。

    sed '5,$s/aa/AA/g' text.txt  表示将文件中第5行到末尾进行替换。

    sed '/^[0-9]/s/aa/AA/g' text.txt  表示将文件中以数字开头的行进行替换操作。

    搜索并输出行内容(不替换文件,只是打印到控制台上面)

    sed -n '2p' text.txt  表示输出第2行。

    将修改应用到文件中(替换文件)

    上面举的例子都没有修改文件里面的内容,只是将修改结果打印到控制台上面,而文件是没有修改的。

    我们可以使用-i选项告诉sed直接修改文件的内容,而不是将修改结果输出到控制台上面。

    sed -i '2d' text.txt  结果之前文件中的第二行没有了

    sed正则中的元字符

    我们知道sed中的命令前面可以使用地址范围进行限制,表示对文件的某些符合条件的行执行相应的操作,其中我们可以使用正则表达式选出想要操作的行,而sed中的正则语法可能与其他命令的正则语法有一些不同,这里面我们列出来sed中常用的正则。

    $ 表示行尾

    ^ 表示行首

    [a-z0-9] 表示字符范围

    [^]表示出了字符集中的字符以外的字符

    sed 的正则中()和{m,n}需要转义

    . 表示任意字符

    * 表示零个或者多个

    + 一次或者多次

    ? 零次或者一次

    | 表示或语法

  • 相关阅读:
    markdown样式代码保存
    【python系统学习08】for循环知识点合集
    【python系统学习07】一张图看懂字典并学会操作
    【python系统学习06】一张图看懂列表并学会操作
    java后端学习记录
    支付功能设计及实现思路
    《Kafka权威指南》读书笔记
    ReentrantLock源码简析
    敏捷开发流程
    上线新功能,如何兼容旧数据?
  • 原文地址:https://www.cnblogs.com/zhanzhuang/p/10275676.html
Copyright © 2011-2022 走看看