文本處理三劍客之劍二 -----------sed流編輯器

    grep、sed和awk在Linux/Unix系統中並稱爲文本處理三劍客(結合正則表達式使用);正則表達式


1、什麼是sed?    shell

        sed是非交互式文本編輯器,它能夠對文本文件和標準輸入進行編輯,標準輸入能夠是來自鍵盤輸入、文件重定向、字符串、變量,甚至來自管道的文本。它是流式編輯器。vim


2、sed的工做過程:app

        sed從文本的一個文本行或標準輸入中讀取數據,將其複製到緩衝區,而後讀取命令行或腳本的第一個命令,對此命令要求的行號進行編輯,重複此過程,直到命令行或腳本中的全部命令執行完畢。
編輯器


3、特色:ide

        相對於其餘的文本編輯sed具有如下讓人難以拒絕的特色;函數

        一、 非交互式,基於模式匹配的過濾及修改文本。spa

        二、逐行處理,因此對溫馨的交互式編輯而言太大的文件使用sed會顯得 十分高效
命令行

,爲用戶節省了大量的時間。orm

        三、可實現對文本的輸出、刪除、替換、複製、剪切、導入、導出等各類編輯操做。

        四、腳本化,在shell腳本編輯中vim須要通知處理文件的哪幾行纔會去處理,而sed默認會處理文件的全部行。

        五、sed只對緩衝區(模式空間)中原始文件的副本進行編輯,不編輯原文件。若是要把編輯後的內容保存,能夠將輸出重定向輸出到另外一個文件。


4、sed適用於如下三種場合

        一、編輯相對交互式文件編輯器而言太大的文件

        二、編輯命令太複雜,在交互式文本編輯器中難以輸入的狀況

        三、對文件掃描一遍,可是須要執行多個編輯函數的狀況


5、sed 相關使用詳解:

  一、語法格式:sed [OPTION]... {script-only-if-no-other-script} [input-file]...

        OPTION----選項

        script-----地址定界編輯命令

        input-file----輸入文件

  二、選項[OPTION]


                (1)、經常使用選項:

                            -n:不輸出(模式空間)中的內容到標準輸出(顯示屏);

                                        sed  -n '1p' input 

                            -e:多點編輯(-e script),表示將下一個字符串解析爲sed編輯命令。若是隻傳送一個命令給sed時,-e 能夠省略;

                                        sed  -e '1p/p'  -e  '1p/=’input 

                            -f:表示正在調用sed腳本文件(-f  /PATH/TO/SED_SCRIPT_FILE),每行一個編輯命令。

                                        例如:腳本append.sed腳本演示sed追加文本方法

                                                   #!/bin/sed -f

                                                    /file:/a\                  a\表示此處換行添加文本 

                            -r:從文本中讀取文本,支持擴展正則表達式;

                                        echo 「aa bb」 | sed -r 's/(.)/a/'            若是不加-r時,後面的()符號要轉義

                            -i:在定位行號以前直接編輯原文件。

                                        sed  -i 's/inn/out/g' test.txt             


                 (2)、地址定界:

                            sed命令一般由定位文本行和sed編輯命令兩部分組成;

                                    使用行號,指定一行,或指定行號範圍

                                    使用正則表達式

                            1)、空地址:對全文進行處理

                            2)、單地址:

                                   x:表明指定行號;

                                    /pattern/:查看包含模式的行,或此模式匹配到的行

                            3)、地址範圍:

                                    x,y:指定x到y的行號範圍內

                                    x,+y:指定x,到後面y行範圍

                                    x,/pattern/:從x號行到與/pattern/的匹配行之間的行

                                    /patter/pattern/:查詢包含兩個模式的行

                                    $:最後一行

                            4)、步進:~

                                    1~2:匹配全部奇數行

                                    2~2:匹配全部的偶數行


                 (3)、地址定界:

                            d:刪除,刪除所匹配到的行(後面通常不接什麼)

                            p:列印,顯示模式空間中的內容(一般與sed -n 一塊兒出現)

                            a\text:新增,text爲字串,這些字串會在新增到下一行出現

                            i\text :插入,text爲字串,這些字串會在新增到上一行出現

                            c\text:替換 ,text爲字串 ,這些字串能夠取代n1,n2之間的行

                            s///:查找替換,能夠直接進行替換,一般結合正則表達式 法,

                                                        其分隔符可自行指定,經常使用的有s@@@, s###等

                                                       g:全局替換;

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

                                                       p:顯示替換成功的行;


6、sed 實例:

            舉例:(假設咱們有一文件名爲ab)

                 刪除某行
                         [root@localhost gayj# sed '1d' ab              #刪除第一行 
                         [root@localhost gayj] # sed '$d' ab              #刪除最後一行
                         [root@localhost gayj] # sed '1,2d' ab           #刪除第一行到第二行
                         [root@localhost gayj] # sed '2,$d' ab           #刪除第二行到最後一行

              顯示某行
                         [root@localhost gayj# sed -n '1p' ab           #顯示第一行 
                         [root@localhost gayj] # sed -n '$p' ab           #顯示最後一行
                         [root@localhost gayj] # sed -n '1,2p' ab        #顯示第一行到第二行
                         [root@localhost gayj] # sed -n '2,$p' ab        #顯示第二行到最後一行

              使用模式進行查詢
                         [root@localhost gayj] # sed -n '/gayj/p' ab    #查詢包括關鍵字gayj所在全部行
                         [root@localhost gayj] # sed -n '/\$/p' ab        #查詢包括關鍵字$所在全部行,使用反斜線\屏蔽特殊含義

              增長一行或多行字符串
                         [root@localhost gayj]# cat ab
                         Hello!
                         gayj is me,welcome to my blog.
                         end
                         [root@localhost gayj] # sed '1a drink tea' ab  #第一行後增長字符串"drink tea"
                             Hello!
                             drink tea
                             gayj is me,welcome to my blog. 
                             end
                             [root@localhost gayj] # sed '1,3a drink tea' ab #第一行到第三行後增長字符串"drink tea"
                                 Hello!
                                 drink tea
                                 gayj is me,welcome to my blog.
                                 drink tea
                                 end
                                 drink tea
                             [root@localhost gayj] # sed '1a drink tea\nor coffee' ab   #第一行後增長多行,使用換行符\n
                                 Hello!
                                 drink tea
                                 or coffee
                                 gayj is me,welcome to my blog.
                                 end

              代替一行或多行
                             [root@localhost gayj] # sed '1c Hi' ab                #第一行代替爲Hi
                                 Hi
                                 gayj is me,welcome to my blog.
                                 end
                             [root@localhost gayj] # sed '1,2c Hi' ab             #第一行到第二行代替爲Hi
                                 Hi
                                 end

              替換一行中的某部分
                         格式:sed 's/要替換的字符串/新的字符串/g'   (要替換的字符串能夠用正則表達式)
                             [root@localhost gayj] # sed -n '/gayj/p' ab | sed 's/gayj/bird/g'    #替換gayj爲bird
                           [root@localhost gayj] # sed -n '/gayj/p' ab | sed 's/gayj//g'        #刪除gayj

                 插入
                             [root@localhost gayj] # sed -i '$a bye' ab         #在文件ab中最後一行直接輸入"bye"
                             [root@localhost gayj]# cat ab
                                 Hello!
                                 gayj is me,welcome to my blog.
                                 end
                                 bye

                 刪除匹配行

                              sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是變量,則須要「」,而不是‘’。記得好像是)

                  替換匹配行中的某個字符串

                          sed -i '/匹配字符串/s/替換源字符串/替換目標字符串/g' filename

相關文章
相關標籤/搜索