關于文本處理工具之SED

                                                    處理文本的工具sed

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

 
        
還有一種模式叫做保持空間:sed工作機制是每次讀取一行文本至‘模式空間’中,在模式空間中完成處理,將處理結果輸出至標準輸出設備,在模式空間中處理一行內容后會繼續處理下一行,那么對于處理過的行可能還會做其它的處理,因此可以先把處理過的行‘導入’至保持空間中,如果需要后續處理的話,就在次‘導入’模式空間中處理,概念:模式空間就好比廚房,保持空間好比冰箱,廚房用作加工生產,冰箱負責,保存一些半成品材料。

        保持空間支持一些高級的命令來運用到保持空間當中 :具體看最下面:高級編輯命令選項

 

 

 

sed用法
sed [選項] 可以跟多個選項 'script'  [源文件]  可以跟多個文本
script: 地址定界編輯命令
,指明對文本做什么樣的操作
  常用選項:
       sed -n    不輸出模式空間中的內容自動打印   
            
例如 ~]# sed -n '2p' /etc/passwd    加了-n選項只顯示出來定義的內容
p顯示模式空間中的內容
                
       sed -e    scropt1 -e scropt2 -e
scropt2 可以進行多點編輯                           
       sed -f   
/path/to/script_file      從指定的文件中讀取腳本并運行   
       sed -r   
支持使用擴展正則表達式
      
       sed -i    直接對源文件進行修改      
                
例如  選項i sed -i.bak '10d' f1 對源文件操作的時候 做好備份文件
                
 
地址定界:抽取的區域
  在不給地址的情況下,對全文進行處理
  給單地址: 
       #        
表示數字,指定的行
                 例如  ~]# sed -n '1p' f1     
只顯示文本中的第1行
              
       $         最后一行
                 例如 
~]# sed -n '$p' f1      只顯示文本中的最后的行
         
       /模式/   
被此處模式所能夠匹配到的每一行;可以是正則表達式 
                 例如 ~]# sed -n '/root/p'
/etc/passwd  只匹配帶有關鍵字的搜索內容
 
  地址范圍:
      #1,#2    
從#1行到#2行                
                例如 ~]# sed -n '1,4p'
/etc/passwd     只顯示文本中第1行到第4行的內容
               
      #,+n    
從#行開始,一直到向下的n行 
                例如 ~]# sed -n '4,8p' f1       
只顯示文本中第4行開始到文本中第8行的內容
               
      #,/模式/ 
從#行開始,到第一次被模式所匹配到的行結束,中間的所有行內容    
                例如 ~]# sed -n '2,/root/p'
/etc/passwd
               
      /模式1/,/模式2/  從第一次唄模式1匹配到的行開始,

                                     到第一次被模式2匹配到的行結束,中間所有行內容 
  

      ~         步進,指定起始行,以及步長。 1~2 計數行 2-2 偶數行    
                 例如
~]# sed -n '1~2p' file1   至顯示1的奇數行,1,3,5…..
                 例如 ~]# sed -n
'2~2p' file1   只顯示2的偶數行,2,4,6…..     
     
  編輯命令:
     d :       
刪除模式空間匹配的行          
                例如  ~]# sed '4d' f1   刪除第4行的匹配的行,
不是刪除源文件內容,輸出刪除而已
          
     p :        顯示模式空間中的內容          

                例如  ~]# sed -n '4p' f1   
配合-n選項不輸出文本內容為自動打印,p僅顯示第4行匹配到的內容
          
     a \text : 
在行后面追加文本,支持使用\n換行字符實現多行追加   
                例如  ~]# sed '/^1/a\xiaomage'
file1   我在開頭為數字1的行,追加內容到1之后的行后面
          
     i \text : 
在行前面插入文本,支持使用\n換行字符實現多行插入 
                例如 ~]# sed '/^1/i\xiaomage'
file1   同樣,使用i 在開頭數字為1的行,追加內容到1之前的行前面
          
     c \text : 
替換行為單行或多行文本
                例如  ~]# sed '/^1/c\xiaomage' file1  
將字符為1的行,替換成xiaomage內容
          
     w /path/to/somefile  
保存模式匹配的行至指定的文件
                例如   ~]# sed '/^1/w /root/f1 ' file1  
將字符開頭為1的 保存指定的路徑下,并命名
          
     r /path/from/somefile 
讀取指定文件的文本至模式空間中匹配到的行后

     =          為模式空間中的行打印行號
     !         模式空間中匹配行取反處理
    
s/正則表達式/替換的位置/
               s///
查找替換,支持使用其他分隔符s@@@,s####
                替換標記
                    g  
行內全局替換
                    p   顯示替換成功的行
                    w   w
/path/to/somefile   將替換成功的行保存至指定的文件
         
  高級編輯命令:
     h     
把模式空間中的內容覆蓋至保持空間中
     H      把模式空間中的內容追加至保持空間中
     g     
從保持空間取出數據覆蓋至模式空間
     G      從保持空間取出內容追加至模式空間
     x     
把模式空間中的內容與保持空間中的內容進行互換
     n      讀取匹配到的行的下一行覆蓋至模式空間
     N     
追加匹配到的行的下一行至模式空間
     d      刪除模式空間中的行
     D      刪除多行模式空間中的行首

            注:命令功能可使用!取反, ;分好可用于分隔腳本

練習 1
1 刪除/etc/grub2.conf 文件中所有以空白開頭的行行首的空白字符
  ~]# sed -r
's@^[[:space:]]+@@' /etc/grub2.cfg
(命令選項,-r使用擴展表達式,查找替換,分隔符,開頭為空白的行
+匹配最少一次,后面跟路徑)

2 刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
~]# sed
's@^#[[:space:]]\+@@' /etc/fstab
 (命令選項, -r 使用擴展表達式,查找替換分隔符,^開頭為#空白符的
匹配前面的字符至少一次)
 
3 在/root/install.log 每一行行首增加#號
~] # sed -r
's@(.*)@#\1@g'
/root/install.log
(命令選項,-r使用擴展表達式,s查找替換分隔符以分組.*任意字符\1#g替換分組內匹配到的字符)
~] #
sed 's@^@#@' /root/install.log
 (命令選項,s查找替換以^開頭為#的字符,后面跟路徑)
 
4
在/etc/fstab 文件中不以#開頭的行的行首增加#號
~] # sed  's@^[^#]@#&@' /etc/fstab 

(命令選項,s查找替換開頭^[^不以#]中增加#號, 后面跟路徑)

 

5 處理/etc/fstab路徑,使用sed 命令取出其目錄名和基名
~] #echo /etc/sysconfig/ |sed -r 
's#[^/]+/?$##' 目錄名
~] #echo "/etc/fst/sd" | sed   -r 's@(.*/)([^/]+/?)$@\1@'

 

6 利用sed 取出ifconfig 命令中本機的ipv4地址
~] #ifconfig|sed -n 2p |sed -e 
's/.*addr://' -e 's/ B.*//'

 

7 統計 centos 安裝光盤中package 目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數
~]# ls *.rpm |rev
|cut -d. -f2 |rev|sort |uniq -c

原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/32497

(0)
小馬哥小馬哥
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:15

相關推薦

  • linux rpm包管理

    一、概要     RPM:RPM Package Manager(rpm軟件包管理器)的縮寫。它能將編譯好的程序打包一個文件或有限的幾個文件,可用于實現安裝、卸載、升級、查詢等功能。 二、rpm軟件包管理 rpm包的命名格式:name-version-relase.arch.rpm 例如:bash-1.1.0-5.el…

    Linux干貨 2015-04-27
  • 設定Linux自動登陸

    設定Linux自動登陸 在實驗場景中我們可能會經常重新啟動Linux,然后反復輸入賬戶密碼登陸。為了在每次啟動后快速進入系統減少在實驗場景中不必要的工作,我們可以設定Linux在啟動后自動登陸到指定賬戶(實驗中一般為root賬戶)?;贚inux一切皆文件的思想,我們可以通過修改配置文本的方式決定是否啟用自動登錄,以及自動登錄的賬戶是普通用戶賬戶還是root…

    Linux干貨 2017-07-15
  • 一起學WINS系列(二)安裝、配置

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/159128  此系列第二節:安裝服務端、配置客戶端。          完整的WINS系統…

    Linux干貨 2015-03-25
  • 高可用集群部署文檔

    同學們都很活躍,自己好久沒寫了,也動動筆,下面文章寫著玩的,如有錯誤請聯系(NET7-粵-義薄云天) 高可用集群部署文檔   目錄: 目錄: 1 項目需求: 2 實現方式: 2 拓撲圖: 3 系統及軟件版本: 3 安裝步驟: 4 IP分配: 4 LVS和keepalived的安裝和配置: 4 LVS主配置: 4 LVS2備 配置: 7 w…

    Linux干貨 2015-08-11
  • HAproxy reload config file with uninterrupt session

    HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great option if you are in the market for a load balancer and need to keep your cos…

    Linux干貨 2015-04-03
  • Linux的文件系統架構基礎

    前言     當今計算機操作系統來說常見功能主要有:進程調度、內存管理、文件系統管理、網絡協議棧支持、驅動程序管理、安全功能等。所有對于我們來講學習Linux文件系統也是一個十分重要的知識,也是學習Linux的必備基礎知識,學習好Linux的文件系統知識也是為接下來學習Linux的其他知識奠定良好的基礎 關鍵詞  &n…

    Linux干貨 2015-04-16
欧美性久久久久