Linux中的文本處理工具—sed

sed 處理文本工具


一、概述

  Stream EDitor,行編輯器

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

   sed 是一種非交互式的文本編輯器,通過給定條件自動的逐行去處理文件。

   grep是用來檢索關鍵字的,sed 卻是搜索匹配處理文本工具。

 

二、功能

   sed 所具有的功能:數據的替換,刪除,新增等,這里的數據可以是一些關鍵字,也可以是一些特定的行。


三、語法結構及用法:


  1.語法結構:sed [option]… 'script' inputfile…


  2.常用選

      -n:不輸出模式空間內容的自動打印(靜默模式)

      -e: 多點編輯,指定多腳本編輯

      -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本并運行。

      -r: 支持使用擴展正則表達式

      -i: 原處編輯(直接修改源文件) -i.back(備份)

wKioL1eqxQbio9SfAABT00bdq68462.png

  3.地址界定(抽取的域):

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

    (2) 單地址

           #: 表示數字,指定的行

             $:最后一行

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

    (3) 地址范圍

        #1,#2 :從#1行,到#2行

        #,+n從#行開始,一直到向下的n行

wKiom1eqwm2STMUZAAAhF5hsOFE043.png

        /pat1/,/pat2/從第一次被pat1匹配到的行開始,到第一次被pat2匹配到的行結束,中間的所有行;

        #,/pat1/ 從#行開始,到第一次被pat1匹配到的行結束,中間的所有行。

wKioL1eqwu6yxP6wAAAWSlwycqg094.png

    (4) ~:步進,指定起始行及步長。

         1~2 奇數行

wKiom1eqwhHzCnk-AAAe2HSFkHg472.png

         2~2 偶數行

  4.編輯命令:

     

      d: 刪除模式空間匹配的

wKiom1eqwXaAh8zRAAAfQx3NjdE921.png

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

wKiom1eqwZaTv9xjAAAweB7nNoE301.pngwKiom1eqwcuTZPx1AAAMvAdmUhE426.png

      a\text:在行后面追加文本;支持使用\n實現多行追加

wKioL1eqwzDB56jAAAA2X_hPA6s710.png

      i\text:在行前面插入文本;支持使用\n實現多行插入

      c\text:替換行為單行或多行文本

      w /path/to/somefile: 把指定的內容另存至/path/to/somefile路徑所指定的文件中。

wKiom1eqw1XCOVO3AAAXUzCEl6I980.png

      r /path/from/somefile:在文件的指定位置插入另一個文件的所有內容,完成文件合并。

wKioL1eqw22DLIWFAAAvJkBYCzY411.png

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

wKiom1eqxCaRsiImAAAijvmwfWk743.png

      ! :模式空間中匹配行取反處理

wKioL1eqxEviOD0bAAApG4tuj8E167.png

   注意:這里添加或替換的內容,只是在模式空間中改變,原文件并沒有被修改,如果要修改源文件 加 -i 選項(慎用)


  5.查找替換(很重要):


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

  如:s/string1/string2/ 用string2 替換string1,string 可以是字符串也可以是正則表達式

   替換記:

      g: 行內全局替換

wKiom1eqxevjJ2PPAAAjXAsiO0s015.png

      p: 顯示替換成功的行

      w /PATH/TO/SOMEFILE :將替換成功的行保存至文件中

  6.sed示例:

      sed‘2p’ /etc/passwd

       sed–n ‘2p’ /etc/passwd

       sed–n ‘1,4p’ /etc/passwd

       sed–n ‘/root/p’ /etc/passwd

       sed–n ‘2,/root/p’ /etc/passwd2行開始

       sed-n ‘/^$/=’ file 顯示空行行號

       sed–n –e ‘/^$/p’ –e ‘/^$/=’ file

       sed‘/root/a\superman’ /etc/passwd行后

       sed‘/root/i\superman’ /etc/passwd行前

       sed‘/root/c\superman’ /etc/passwd代替行      

      sed‘/^$/d’ file   刪除空行

       sed‘1,10d’ file

       nl /etc/passwd| sed‘2,5d’

       nl /etc/passwd| sed‘2a\tea’

       sed's/test/mytest/g' example

       sed–n‘s/root/&superman/p’ /etc/passwd單詞后

wKiom1eqxhDRHi56AAAkLAEyNiY454.png

       sed–n‘s/root/superman&/p’ /etc/passwd單詞前

       sed-e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets  多次處理

       sed–i.bak ‘s/dog/cat/g’ pets


   7.保持空間及高級命令


   sed 除了“模式空間”(pattern space),還有一個“hold space”的內存空間,稱之為 保持空間

 所謂保持空間,就是,對于模式空間處理過的行,可能還有其他的處理,因此可以先把處理過的行“傳送”至保存空間,然后再后續的處理中再次“傳送”回模式空間中。 這就類似于加工車間和倉庫的概念,好比模式空間為加工車間,保持空間為倉庫,不過這里的倉庫存放的都是些半成品的產品。


   高級編輯命令

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

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

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

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

       x: 把模式空間中的內容與保持空間中的內容進行互換

       n: 讀取匹配到的行的下一行覆蓋至模式空間

       N:追加匹配到的行的下一行至模式空間

       d: 刪除模式空間中的行

      D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed


示例:

       sed -n 'n;p' FILE

         sed '1!G;h;$!d' FILE

         sed '$!N;$!D' FILE

         sed '$!d' FILE

         sed ‘G’ FILE

         sed ‘g’ FILE

         sed ‘/^$/d;G’ FILE

         sed 'n;d' FILE

         sed -n '1!G;h;$p' FILE




  練習:

    1、刪除/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符

wKioL1eqx0yziwkdAAAfS_I_d_g091.png

   2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符

wKioL1eqx3OgZMS-AAATRpXLiBw961.png

   3、在/root/install.log每一行行首增加#號

wKiom1eqx4OgFHNsAAAgjqLpKQk456.png

   4、在/etc/fstab文件中不以#開頭的行的行首增加#號

wKioL1eqx5_j1lbIAABNXtVlwpk787.png

    5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名

wKiom1eqx9ijwMWNAAAftJm3pd0151.pngwKiom1eqx-zyRPFzAAAUlxDIBWI423.png

       過程分析如下

wKiom1eqyISi1TvbAAAobHaBmaI288.png

   6、利用sed 取出ifconfig命令中本機的IPv4地址

wKioL1eqyBOjncs_AAAbBFGMJCU359.png

   7、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數

wKioL1eqyCLhJYU_AAAxw_VRKdU053.png

 

 

 總結與感悟:

   1.通過對sed的學習,知道了sed相對于grep的功能更加強大。

   區別:

     grep只是一個文本過濾工具,作用就是根據用戶指定的過濾條件對目標文件逐行進行匹配檢查,打印匹配到的行。

     sed是一種非交互式的文本編輯器(通過給定的條件自動逐行的去處理文件),grep只是用來檢索條件關鍵字的,而sed是搜索匹配處理文本工具,功能可以實現數據的替換、刪除、新增等,更加強大。

   2.在處理一些題目時,可以采用的思路方法:

    對目標文件利用擴展的正則表達式,進行分組處理,用組表示出所有的內容,然后把想要的內容用前面的分組替換。

    注意 .* 的靈活應用,轉義符 \ 的使用(在.和()中使用)以及匹配次數的靈活應用 \+

 


原創文章,作者:zhumengxiaotao,如若轉載,請注明出處:http://www.www58058.com/32745

(0)
zhumengxiaotaozhumengxiaotao
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • Raid的工作原理

    1,什么是Raid Raid的基本原理就是把多個磁盤組合到一起,組成一個磁盤組,使性能達到或超過一個容量巨大價格昂工藝的磁盤,當然基于硬件的RAID解決方案比基于軟件RAID技術在使用性能和服務性能上稍勝一籌,具體表現在檢測和修復多位錯誤的能力、錯誤磁盤自動檢測和陣列重建等方面。 2.RAID級別介紹;一般常用的RAID階層,分別是RAID 0、RAID1、…

    Linux干貨 2017-06-19
  • http://www.jianshu.com/p/f1d0739b141f

    Linux干貨 2017-07-30
  • 管中窺豹—linux命令

    命令行選項風格: 1、原始unix風格     a、命令行選項以連字符'-'開頭,后跟單個字符表示選項,選項后面跟著取值,如:mysql -hlocalhost      b、選項不帶取值的,可以組合在一起,如:sed -n -r 可以寫成 sed -nr  …

    Linux干貨 2016-10-30
  • 用戶權限管理

    描述: 用戶在系統上的操作受到權限的約束,例如對文件或者目錄進行查看、修改、復制、刪除等操作時,由文件或者目錄對應的操作的權限所決定的。 在root的家目錄下創建一個普通文件和目錄并查看其屬性: [root@localhost ~]# echo 123 > file1 [root@localhost&n…

    Linux干貨 2016-08-04
  • sed編輯器使用

     簡述       sed編輯器被稱作流編輯器,和普通的交互式文本編輯器恰好相反。在交互式文本編輯器中(比如vim), 你可以用鍵盤命令來交互式地插入、刪除或替換數據中的文本。流編輯器則會在編輯器處理數據之前基于預先 提供的一組規則來編輯數據流。sed編輯器可以根據命令來處理數據流中的數據,這些命令…

    2017-06-19
  • GRUB詳解

    GRUB的啟動流程: grub: 在centos56中:0.X版本 grub legacy 在centos7中:1.X版本  grub2 grub可分為三個階段: stage1:mbr前446字節中保存的Boot Loader程序 stage1.5:mbr之后的扇區,讓stage1中的Boot Loader能夠識別stage2所在的分區上的文件系統…

    Linux干貨 2016-09-13
欧美性久久久久