文本處理三劍客之 Sed

     Sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(
pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變
,除非你使用重定向存儲輸出。Sed主要用來自動編輯一
個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

   下面來說說它的用法:

sed [option]… ‘script’ inputfile

sed:
   -n:取消自動打印,輸出到屏幕。
   -e: 多點編輯,對每行處理時,可以有多個Script 即可以跟多個命令。
   -f: 把Script寫到文件當中,在執行sed時-f 指定文件路徑,如果是多個Script,換行寫
   -r: 支持擴展的正則表達式
   -i: 直接將處理的結果寫入文件
    -i.bak  在將處理的結果寫入文件之前先備份
script
   地址定界:
     (1) 不給地址:對全文進行處理
         如:sed -n ‘p’ 文件
     (2) 單地址:
         #: 指定的行
         如:sed -n ‘2p’ 文件
         /pattern/:被此處模式所能夠匹配到的每一行
         如:sed -n ‘/linux/p’文件
     (3) 地址范圍:
         #,#
         如:sed -n ‘2,3p’
         #,+#
         如: sed -n ‘2,+1p’
         /pat1/,/pat2/
         如: sed -n ‘/redhat/,/linux/p’
         #,/pat1/
         如:sed -n ‘2,/linux/p’
     (4) ~:步進

         1~2 奇數行

         2~2 偶數行
         如:sed -n ‘1~2p’  只打印奇數行
            sed -n ‘2~2p’  只打印偶數行

 

      編輯命令:

      d: 刪除模式空間匹配的行,并立即啟用下一輪循環
         如:sed ‘2d’ /etc/passwd (刪除/etc/passwd文件中的第二行)
      p:打印當前模式空間內容,追加到默認輸出之后
         如:sed ‘2p’ /etc/passwd 
      a [\]text:在指定行后面追加文本,支持使用\n實現多行追加

         如:sed ‘2a\123\n456\n789 /etc/passwd 

      i [\]text:在行前面插入文本

         如:sed ‘2i\123\n456\n789’ /etc/passwd  

      c [\]text:替換行為單行或多行文本
         sed ‘2c\123\n456\n789’ /etc/passwd
      w /path/somefile: 保存模式匹配的行至指定文件
         如:sed -n ‘3w /root/3.file’ /root/bin
      r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后
         sed ‘3r /root/mage.txt’ /etc/passwd
      =: 為模式空間中的行打印行號
         sed ‘=’ /etc/fstab 
      !:模式空間中匹配行取反處理
         sed -n ‘2!p’ /etc/fstab

      s///:查找替換,支持使用其它分隔符,s@@@,s###替換標記。

         如:sed -n ‘s/root/rooter/g’ /etc/passwd
      g: 行內全局替換

         如:sed ‘s/root/rooter/g’ /etc/passwd 

      p: 顯示替換成功的行

         如:sed -n ‘s/root/rooter/gp’ /etc/passwd 
      w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

  高級編輯命令:

      h: 把模式空間中的內容覆蓋至保持空間中
      H:把模式空間中的內容追加至保持空間中
      g: 從保持空間取出數據覆蓋至模式空間
      G:從保持空間取出內容追加至模式空間
      x: 把模式空間中的內容與保持空間中的內容進行互換
      n: 讀取匹配到的行的下一行覆蓋至模式空間
      N:讀取匹配到的行的下一行追加至模式空間
      d: 刪除模式空間中的行
      D:刪除當前模式空間開端至\n的內容(不再傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

   示例:

       sed -n ‘n;p’ FILE  顯示偶數行
       sed ‘1!G;h;$!d’ FILE  倒序顯示
       sed -n ‘1!G;h;$p’ 倒序顯示
       seq 7 |sed ‘n;d’ 顯示奇數
       sed  ‘N;D’ 顯示最后一行
       sed ‘$!d’  顯示最后一行
       sed ‘G’  每行之間加空行 
       sed ‘g’  把每行內容替換成空行
       sed ‘/^$/d;G’  確保每一行下面都有一個空行

 

小試牛刀:

1.刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符
  cat grub2.cfg |sed -nr ‘s/^[[:space:]]+//p’

文本處理三劍客之 Sed

文本處理三劍客之 Sed

(注:這里因為事先拷貝了一份grub2.cfg文件,所以直接cat grub2.cfg了,后面的題的文件也是事先復制過的。不再重申)截圖只是一部分,只要大家明白意思即可。這里用到擴展正則表達式,所以需要參數-r,-n表示不打印文件內容到屏幕,p表示打印出作用過的行,即改變過的行被顯示出來。

2.刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
 (1)sed -r “/^#[[:space:]]/s/^#[[:space:]]+([^[:space:]])/\1/” fstab

 (2)sed -r ‘s/^#[[:space:]]+//’ fstab

文本處理三劍客之 Sed

上面的命令可能不是太好看出來到底輸入的命令是執行了還是沒執行,那下面的命令加上了-n , p 是不是一目了然了呢文本處理三劍客之 Sed(對了,我介紹的是(2),至于(1)呢留給你們自己試驗吧啊。文本處理三劍客之 Sed我就是故意把燒腦的留給你們的,怎么滴吧,哈哈~)

3.在centos6系統/root/install.log每一行行首增加#號
  sed ‘s/^/#/g’ /root/install.log

文本處理三劍客之 Sed

有沒有很簡單?起初看到題,還以為是什么高深的題,糾結了半天最后跳過了,看到演示后,知道真相的我眼淚掉下來文本處理三劍客之 Sed,什么鬼,就是個這?一個表示開頭的^,一個被加上的#。有句話叫“你認為的困難都不是困難”,應不應景?文本處理三劍客之 Sed仰天哀嚎一聲……

4.在/etc/fstab文件中不以#開頭的行的行首增加#號
  cat fstab |sed  ‘s/^[^#]/#&/’

文本處理三劍客之 Sed

沒有對比就沒有傷害,當然這里沒有對比就沒有一目了然文本處理三劍客之 Sed。那你說后面的&是啥玩意,不要可以么?如果你夠任性,沒什么不可以文本處理三劍客之 Sed。下面來說說&干什么的,還記得講vim時,有這樣一句話么【替換為的內容:不能使用模式,但可以使用\1, \2, …等后向引用符號;還可以使用“&”引用前面查找時查找到的整個內容】所以s/^[^#]/#&/就成了在不以#號開頭的行的行首加上#號。是不是似懂非懂,沒關系多看幾遍消化消化。想當初我也是一臉懵逼的看著人家操作的。文本處理三劍客之 Sed說多了都是淚,你們先看,我去倒到眼里的水再回來,see you.

原創文章,作者:吼吼哈嘿,如若轉載,請注明出處:http://www.www58058.com/85396

(0)
吼吼哈嘿吼吼哈嘿
上一篇 2017-08-26
下一篇 2017-08-26

相關推薦

  • Homework Week-10 CentOS啟動相關及bash腳本編程

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個分區提供rootfs;   (3) 為rootfs提供…

    Linux干貨 2016-10-24
  • N24_jerry 第十二周作業

    1、請描述一次完整的http請求處理過程; 簡介 一次完整的HTTP請求過程從TCP三次握手建立連接成功后開始,客戶端按照指定的格式開始向服務端發送HTTP請求,服務端接收請求后,解析HTTP請求,處理完業務邏輯,最后返回一個HTTP的響應給客戶端,HTTP的響應內容同樣有標準的格式。無論是什么客戶端或者是什么服務端,大家只要按照HTTP的協議標準…

    Linux干貨 2017-03-22
  • 學習總結

    課上練習整理

    Linux干貨 2017-11-19
  • 第一周初入Linux世界 —馬哥教育網絡班N22_第一周課程練習

    一、描述計算機的組成及其功能        計算機體系結構以圖靈機理論為基礎,屬于馮·諾依曼體系結構。    計算機由運算器、控制器、寄存器、輸入輸出設備組成            運算器:是計算機中執行各種算術和邏輯運算操作的部件。運算器…

    Linux干貨 2016-08-15
  • 4th work

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。 [root@localhost etc]# cp -r /etc/skel/ /home/tuser1 [root@localhost etc]# chmod go-rwx /home/tuser1/ 2、編輯/etc/gr…

    Linux干貨 2017-10-09
  • 系統基礎之文件管理工具

    系統基礎之文件管理工具   linux的重要哲學思想之一,一切皆文件.那作為系統管理員,就要求對文件的操作管理特別熟悉.那么下面介紹的一個工具可以幫助到大家,更有效,快捷的完成對文件的處理.下面讓我們來認識以下的工具. 文本工具: 文件內容:   cat: 復制標準輸入到標準輸出     選項:   &nbs…

    Linux干貨 2016-08-07
欧美性久久久久