sed基礎

sed  文本流編輯的  編輯器正則表達式

hold space :保持空間。倉庫,半成品centos

 

 

 

 

 

 

一次從文件中讀取一行,放到本身編輯的內存緩衝空間即模式空間,不會編輯原文件;根據所給定的命令在模式空間中作編輯處理,處理結果默認輸出到顯示屏bash

 

sed [OPTION]... {script-only-if-no-other-script} [input-file]...app

經常使用選項:編輯器

  -n :不輸出模式空間中的內容至屏幕spa

  -e : 多點編輯 一個sed中實現多個編輯操做3d

  -f :/PATH/TO/SCRIPT_FILE :從指定文件中讀取編輯腳本code

  -r :支持使用擴展表達式,默認exprblog

  -i :原處編輯即修改原文件  注慎用先備份token

1、地址定界:

  a) 不給地址:對全文進行處理

     # sed  'd'  /etc/passwd

  b) 單地址: 

    # : 指定的行

       sed  '5d'  /etc/passwd

    /pattern/ :被此處模式所可以匹配到的每一行

       sed  '/^#/d'  /etc/fstab

  c) 地址範圍:

    

  d)  $ (^$ 、^[[:space:]]*$)

刪除某文件中的空行
    sed '/^$/d' /tmp/fstab
刪除某文件中空白行
    sed '/^[[:space:]]*$/d' /tmp/fstab 

  e) !  表示方法:地址定界!  取反條件    

刪除地址界定的行
    sed  '/^UUID/d'  /etc/fstab

刪除非地址界定的行 
    sed  '/^UUID/!d'  /etc/fstab

  f)  ~ 步進

奇數行
    sed -n '1~2p' /tmp/fstab 
    sed  '2~2p' /tmp/fstab 

偶數行
    sed -n '2~2p' /tmp/fstab 
    sed  '1~2p' /tmp/fstab 

 

2、編輯命令:

   d : 刪除範圍內的行

 刪除地址範圍內的行      
    sed   '/^UUID/d' /tmp/fstab 
   sed   '1.3d' /tmp/fstab       

      p : 打印當前模式空間中的內容  

 sed 'p' /tmp/fstab 
    每一行會顯示2遍,由於sed默認打印模式空間中的內容,符合條件的內容又打印一遍。
 sed  -n 'p'  /tmp/fstab
僅顯示符合條件的行
      
sed -n '/^UUID/p' /tmp/fstab    sed -n '1p' /tmp/fstab

   a \'text'  在地址界定行的下一行追加(append)文本

     支持換行追加:\n

在某文件第一行以後添加
    sed '1a \hello ' /tmp/fstab 

在某文件的1到3行每一行追加文本
    sed '1,3a \hello ' /tmp/fstab 

[root@localhost tmp]# sed -n '/^UUID/a \hello \nHow are you ? ' /tmp/fstab 
hello 
How are you ? 

 i \'text'  在地址界定行的上一行插入(insert)文本

     支持換行插入:\n

在某文件第一行之上插入
    sed '1i \hello ' /tmp/fstab 

在某文件的1到3行每一行摻入文本
    sed '1,3i \hello ' /tmp/fstab 

[root@localhost tmp]# sed -n '/^UUID/i \hello \nHow are you ? ' /tmp/fstab 
hello 
How are you ? 

 c \'text'  在地址界定的行   替換爲text

     支持換行替換:\n

替換某文件第一行
    sed '1c \hello ' /tmp/fstab 

替換某文件的1到3行,爲指定的text
    sed '1,3c \hello ' /tmp/fstab 

[root@localhost tmp]# sed -n '/^UUID/c \hello \nHow are you ? ' /tmp/fstab 
hello 
How are you ? 

     w /PATH/TO/SOMEFIE  將地址界定的行,保存至/PATH/TO/SOMEFIE中

sed  '/^UUID/w /tmp/a.txt ' /tmp/fstab

sed -n '/^UUID/p'  /etc/fstab > b.txt

  r /path/to/somefile :讀取指定文件的文本流至模式空間中匹配到的行的行後

 
 
將某文件中的內容插入至指定文件中
  sed  '/^UUID/r  /etc/issue' /etc/fstab 
  sed '1,3r /etc/centos-release' /etc/issue   #多行插入文本時,在其後插入

  

  = :爲模式空間中的行打印行號     

編號:在匹配到的行,上面編號

sed '/^UUID/='  /tmp/fstab
sed '='  /tmp/fstab

  s/// : 支持使用其它分隔符,或使用s@@@ 、s###  、s||| 、s,,

    替換標記  : 

      g 全局替換

      p : 顯示替換成功的行

      w /PATH/TO/SOMEFILE  : 將替換成功的結果保存至指定文件中

      i : 忽略pattern的字符大小寫

  sed -n 's/r..t/&er/p' /etc/passwd      #此處「&」表明引用前面的「r..t」

  # sed 's,,,w /PATH/TO/SOMEFILE' FILE   # sed 's,,,' FILE > /PTH/TO/SOMEFILE
  [root@localhost bin]# head -n 1 < /etc/passwd | sed 's,rOOt,ROOT,gi'   ROOT:x:0:0:ROOT:/ROOT:/bin/bash

   

向後引用:

  正則表達式引擎將 括號中模式匹配到的內容 記錄至內置特殊變量中 \1  \2  \3  ....

     s/([a-z]*([^/]+))

        \1 此處例子表明[a-z]*[^/]+ 所匹配到內容

        \2 [^/]+  所匹配到的內容

   基本正則表達式:\(\)

    擴展正則表達式:()

 

練習1:刪除/boot/grub/grub.conf文本中全部以空白開頭的行行首的空白字符

    sed  's@^[[:space:]]\+@@'  /tmp/grub.conf
CentOS 7:
    # cp /etc/grub2.cfg /tmp/grub2.cfg
    # sed -i 's,^[[:space:]]\+,,' /tmp/grub2.cfg

練習2:刪除/etc/fstab文件中全部以#開頭,後面至少跟一個空白字符的行的行首的#和空白字符

  sed 's@^#[[:space:]]\+@@'  /tmp/fstab
  
   sed -i -r 's|^#[[:space:]]+||' /tmp/fstab

 

練習3:echo 一個絕對路徑給sed命令:取出其基名,取出目錄名  

目錄
  echo
/etc/fstab | sed 's@[^/]\+/\?$@@'
基名
  
echo /etc/fstab | sed -r 's@(.*/)@@' 

[root@localhost tmp]# echo /etc/fstab | sed -r 's@(.*/)([^/]+$)@\2@'

 

3、高級編輯命令:(不經常使用)

模式空間(pattern)  保持空間(hold space)

注:保持空間不會作任何處理

   ------》to hold 

      h :把模式空間中的內容覆蓋至保持空間中;

   H:把模式空間中的內容追加至保持空間中; 

      get《-----

   g :從保持空間取出數據覆蓋至模式空間;

   G :從保持空間取出內容追加至模式空間;

      

      x <----->將模式空間中的內容與保持空間的中內容進行互換

        n    匹配到的行 在處理時,將其下一行覆蓋至模式空間中

   N   匹配到的行  在處理時,將其下一行追加至pattern

  

   d   匹配到的行 處理時,刪除模式空間中的單行;

   D 刪除多行模式空間中的多行 

 

sed -n 'n,p'  FILE    顯示偶數行

sed  'n;d'  FILE        顯示奇數行

 

tac FILE  逆向顯示文件內容

  sed  '1!G;h;$!d' FILE    逆向顯示文件內容
  sed  -n  '1!G;h;$p' FILE 

 

sed '$!N;$!D'  FILE <==> tail -2 FILE  顯示文件最後兩行

sed '$!d'  FILE   取出文件最後一行

每一行後添加一個空白行

  sed 'G'  FILE 

  sed 'a\ '  ''  FILE 

 

sed 'g' FILE  所有替換爲空白行 

sed  '/^$/d;G'  FILE  刪除多個空白行,在每一個行後添加一個空白行

相關文章
相關標籤/搜索