1. 程式人生 > 其它 >Linux三劍客之一sed

Linux三劍客之一sed

sed

定義

  流媒體編輯器(修改文字)

格式

  sed [引數] '處理規則' [操作物件]

    處理規則:正則

引數

  -e :允許多項編輯

    每多編輯一行在那行操作前加一個-e

    也就是說 編輯多少行就有多少個-e

  -n :取消預設輸出

  -i :就地編輯(實時編輯直接生成結果)

  -r :支援拓展正則(就是自定義正則)

  -f :指定sed匹配規則檔案

定位(鎖定文字位置)

  通過數字或者正則篩選符合要求的資料所在行數

  1.數字定位法

    格式:

      sed '[行數] [模式]' [待處理文字]

    eg:

      sed '3d' 1.txt

      sed '2,3d' 1.txt

  2.正則定位法

    格式:

      sed '[正則表示式] [模式]' [待處理文字]

    eg:

      sed '/^g/d' 1.txt

  

  3.數字和正則

    格式:

      sed '[數字,正則表示式] [模式]' [待處理文字]

    eg:

      sed '3,/^g/d' 1.txt

  4.正則和正則

    格式:

      sed '[正則表示式,正則表示式] [模式]' [待處理文字]

    eg:

      sed '/^g/,/^j/d' 1.txt

  

模式

  d :刪除

    sed '[定位][模式d]' [待處理檔案]

    sed '3d' 1.txt

  p :列印

    sed '[定位][模式p]' [待處理檔案]

    sed '/^g/p' 1.txt

  a : 在當前行下一行新增一行或多行

    sed '[定位][模式a][新增內容]' [待處理檔案]

    sed '2axxx' 1.txt

  c :用新文字修改(替換)當前行

    sed '[定位][模式c][新內容]' [待處理檔案]

    sed '2cxxx' 1.txt

  i :在當前行插入文字,當前行向下移一行(單獨使用時)

    sed '[定位][模式i][新增內容]' [待處理檔案]

    sed '2ixxx' 1.txt

  r : 將指定文字中內容讀到待處理文字中

    sed '[定位][模式r][指定文字]' [待處理檔案]

    sed '2r r.txt' 1.txt

  w : 將待處理文字指定行寫入指定檔案中

    sed '[定位][模式w][指定文字]' [待處理檔案]

    sed '2w r.txt' 1.txt

  y : 將字元替換成另一個字元

    sed '[定位][模式y]#[舊字元]#[新字元]#' [待處理檔案]

      一個一個字元替換 可以多個字元一起處理

    sed '2y/fa/FA/' 1.txt

  s : 將字串替換成另一個字串(每一行只替換一次)

    sed '[定位][模式s]#[舊字串]#[新字串]#' [待處理檔案]

    sed 's/11/22/' 1.txt

  g : 全部執行(符合正則的都執行)

    sed '[定位][模式s]#[舊字串]#[新字串]#[模式g]' [待處理檔案]

    sed 's/11/22/g' 1.txt

  i : 忽略大小寫(跟 s 模式一起使用時)

    sed '[定位][模式s]#[舊字串]#[新字串]#[模式g][模式i]' [待處理檔案]

    sed 's/11/22/gi' 1.txt

  & :代表前面匹配到的內容

  

案例

  案例1:將nginx.conf中的註釋行全部去掉

    [root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf

    解:把

  案例2:將nginx.conf中每一行之前增加註釋

    [root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf

  案例3:要求一鍵修改本機的ip

      192.168.15.100 ---> 192.168.15.101

      172.16.1.100 ---> 172.16.1.101

    [root@localhost ~]#sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

  案例4:將/etc/passwd中的root修改成ROOT

    [root@localhost ~]#sed -i 's#root#ROOT#g' /etc/passwd

END