sed

一。语法:

      1.直接修改源文件:sed -i 's/原字符串/替换字符/'  filename or ‘grep xxx’

      2.不修改源文件,只在屏幕上输出:sed -e 's/原字符串/替换字符/'  filename or ‘grep xxx’ 

      3. 执行sed脚本:sed -f “xxx”

二。写法注意事项:

      1. 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义

      2.命令中的三根斜线分隔符可以换成别的符号,有时候替换目录字符串的时候有较多斜线,这个时候换成其它的分割符是较为方便,只需要紧跟s定义即可,例如,冒号,#等:sed 's?原字符串?替换字符串?'  

      3.单引号” ‘ ’”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,格式如下:sed "s/原字符串包含'/替换字符串包含'/"

      4.同时执行两个替换写法:sed -i 's/^/添加的头部&/g;s/$/&添加的尾部/g' 

      5.一些特殊字符的使用

     ”^”表示行首

     ”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行)

三。使用场景:

      1. 对文件中所有匹配到的原字符串全部做替换:

         sed -i 's/原字符串/替换字符串/g'  filename

         在 s 命令里以 g 结尾表示的是:全局性,意即“替代文本取代正则表达式中每一个匹配的”。如果没有设置 g,sed 只会取代每行第一个匹配的。

     2. 对文件中某一行/某几行匹配到的做全部替换:

         sed -i '2s/原字符串/替换字符串/g'  #替换第2行

         sed -i '2,5s/原字符串/替换字符串/g' #替换2到5行

    3.  对文件中某一行/某几行匹配到的第几个做替换:

         sed -i '3,5s/filter/haha/2' test.log  #将 test.log 文件中第 3-5 行的第 2 个“filter”替换成“haha”

    4. 行首,行尾,及文件末的替换

        sed 's/^/添加的头部&/g'      #在所有行首添加

        sed 's/$/&添加的尾部/g'      #在所有行末添加     

     sed '$s/原字符串/替换字符串/g' #替换最后一行

    5.  整行替换:

         sed -e '1c/#!/bin/more' file (把第一行替换成#!/bin/more)
         思考:把第 n 行替换成 just do it
     sed -e 'nc/just do it' file
     sed -e '1,10c/I can do it' file (把 1 到 10 行替换成一行: I can do it)
         思考:换成两行(I can do it! Let's start)
     sed -e '1,10c/I can do it!/nLet'"/'"'s start' file   

   6. 用sed删除字符或换

       6.1删除行首空格

sed -i 's/^ //g' test

      6.2删除行尾空格

sed -i 's/ $//g' test

   7. 同时插入多行:

      sed -i 's/spec:/spec:\n  gateways:\n  - bookinfo-gateway/g' virtual-service-all-v1.yaml 

posted on 2018-04-04 08:58  晓风残梦  阅读(210)  评论(0编辑  收藏  举报

导航