zoukankan      html  css  js  c++  java
  • linux sed用法

    sed是一种流编辑器,处理时会把当前处理的行存储在临时缓冲区中(模式空间pattern space),接着用sed命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出到屏幕,接着处理下一行,这样不断重复直到文件末。除非使用了-i参数进行写入,否则文件本身内容并没有改变。

    使用语法:  sed [-nefri] 'command' file 

    常用选项:

      -n∶使用安静(silent)模式,在一般sed的用法中,所有来自STDIN的数据一般都会被输出到屏幕,加上-n参数则只有经过sed特殊处理的行才会被输出

      -e∶直接在指令列模式上进行 sed 的动作编辑

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

      -r∶支持延伸型正规表示法的语法(默认是基础正规表示法语法)

      -i∶直接修改读取的文件内容,而不是由屏幕输出       

    常用命令:
      a:新增行,a的后面可以接字串,这些字串会在当前行的下一行出现

      i:插入行,i的后面可以接字串,这些字串会在当前行的上一行出现

      d:删除行,通常不接任何参数,直接删除地址表示的行

      c:替换行, c 的后面可以接字符串,这些字符串会替换 n1,n2 之间的行

      s:替换字符串,通常这个s的动作可以搭配正规表示法,例如 1,20s/old/new/g 就是啦!

      p:打印,即将选择的内容输出,通常p会与参数sed -n一起搭配
             

    创建一个文件a.txt,一共3行,每一行的内容分别为hello 1、hello 2、hello 3

    1.新增行a,在指定行之后新增,不指定行则在每一行后面新增

    [root@oldboy ~]# sed '2a a by 2' a.txt 
    hello 1
    hello 2
    a by 2
    hello 3

    2.插入行i,在指定行之前插入,不指定行则在每一行前面都插入

    [root@oldboy ~]# sed '2i i by 2' a.txt 
    hello 1
    i by 2
    hello 2
    hello 3

    3.删除行d,删除指定行,不指定行则删除所有行

    [root@oldboy ~]# sed '2,3d' a.txt 
    hello 1
    [root@oldboy ~]# sed '$d' a.txt 
    hello 1
    hello 2

    删除指定某一行'nd',删除多行'm,nd'(包括边界行),^可表示第一行,$可表示最后一行。

    4.替换行c

    [root@oldboy ~]# sed '1c haha' a.txt
    haha
    hello 2
    hello 3
    [root@oldboy ~]# sed '1,2c haha' a.txt
    haha
    hello 3
    [root@oldboy ~]# sed 'c haha' a.txt
    haha
    haha
    haha

    注意,'m,nc'会将第m和第n行(包含)整体替换为指定内容,而不指定行则会将每一行都替换为指定内容。

    5.替换字符串s,替换指定行字符串,不指定行则替换所有行指定字符串

    使用方法:'[m,n]s/待替换字符串/新字符串/[g]'

    这三个/都是必须的,其中m和n表示行号,g表示替换行中所有符合条件的字符串,而无参数g则表示只替换行中第一个符合条件的

    [root@oldboy ~]# sed '2s/l/L/' a.txt 
    hello 1
    heLlo 2
    hello 3
    [root@oldboy ~]# sed '2,3s/l/L/g' a.txt 
    hello 1
    heLLo 2
    heLLo 3

    6.打印p

    [root@oldboy ~]# sed '2p' a.txt 
    hello 1
    hello 2
    hello 2
    hello 3
    [root@oldboy ~]# sed -n '2p' a.txt 
    hello 2

    可以看到不加参数-n的时候,p命令在将文件整体输出的基础上,再输出一遍sed处理的行,而加上参数-n则只会输出经过sed处理过的行。

    7.-i参数修改文件内容

    上述6个命令均是对输出到屏幕上的内容进行处理,而文件本身内容并没有修改,而使用-i参数可以将修改保存到文件。

    [root@oldboy ~]# sed 's/h/H/g' a.txt 
    Hello 1
    Hello 2
    Hello 3
    [root@oldboy ~]# cat a.txt 
    hello 1
    hello 2
    hello 3
    [root@oldboy ~]# sed -i 's/h/H/g' a.txt 
    [root@oldboy ~]# cat a.txt 
    Hello 1
    Hello 2
    Hello 3

     

  • 相关阅读:
    写给太阳村张老师及其员工的公开信
    不尽的想法,不够的时间
    XP+新装SQL Server 2005出现无法连接的问题+解决
    【Windows编程】【网络编程】【基于网络端口通信的客户端应用程序】解决方案【示意程序】
    [VS2005SP1]如何创建从母版页继承的Web窗体?(SP1所带来的小小变更)
    小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
    [Oracle]ASP.NET+Oracle连接类conn.cs
    SQLServer2005出了点怪事~(应该是编码问题~)
    [ASPNET2.0]Membership类+SQLServer2005,AspNet_regsql.exe的使用
    Originality Life~Some Desktop Design (From Google Ideas)+ Pictures & PNG Files & 3DMAX Files download!
  • 原文地址:https://www.cnblogs.com/Forever77/p/10660029.html
Copyright © 2011-2022 走看看