sed用法總結

來源:互聯網
上載者:User

每次都要google怎麼用sed,因為本人實在記不住那些符號的意思。索性總結一下一些用法,節省搜尋時間。

1.  什麼是sed
    sed是一種改進的,非互動編輯器。使用者可以用命令實現vi的所有編輯功能。sed不會改變檔案內容,
而是把結果輸出到螢幕。

2.   sed和Regex
    和grep一樣,sed也支援正則表示式。grep所支援的metacharacter,sed均支援。

3.  一些重要的command
    (1) p: 輸出命令。 比如sed '/love/p' 將輸出全部的文本,並且符合love的行將被輸出2次數。

    (2) n: 抑制sed的預設行為,比如上例中,就是因為sed預設輸出行, 而命令p又輸出行。sed -n '/love/p' 將輸出包含love的所有行而沒有重複。

    (3) d: 刪除命令。 刪除某行,比如sed '3d' 刪除第三行並預設輸出其它行。
           sed '3,$d' 刪除3行至末行內容,','表示範圍。

    (4) s: 替換命令。 替換字串, 比如sed 's/love/hate/g' filename > filename.back. 將替換filename檔案中的
            love字串為hate。
           又如:sed 's/[0–9][0–9]$/&.5/' datafile 在檔案中尋找以2為數字結尾的行,並在這2位元字後面.5,&表示Regex所匹配出的串。
           又如:sed 's#3#88#g' datafile 任何在s後面的符號都被視作替代'/'而成為新的分界符。

    (5) ,: 確定選擇範圍。比如:sed -n '/west/,/east/p' datafile 在檔案中首先匹配west, 匹配到就開始輸出行直至匹配到east為止,注意Regex可以是數字(標誌行),可以是 字元組合,也可以是混合。sed -n '/west/, /&/p' datafile 首先匹配west,輸出行,直到最後一行為止。
    
    (6) -e: 編輯命令:用於串連多個sed編輯命令
            比如說:sed -e '1,3d' -e 's/love/gloom/g' datafile :首先刪除1至3行,然後全文替換love為gloom。
            但有一點需要注意:前一個命令的輸出會影響後一個命令。他們是順序執行的。
            
    (7) r: 讀檔案命令:允許sed載入特定檔案的內容到當前行的下一行。
           比如說:sed '/Susan/r tmpfile' currentfile: 在currentfile中匹配Susan,一旦匹配上,則在下一行
           載入tmpfile的內容,如果Susan在currentfile中出現多次,則tmpfile將被載入多次。
           
    (8) w: 寫檔案命令:允許sed將匹配出的行寫到新檔案中
           比如說:sed -n '/north/w tmpfile' currentfile:在currentfile中匹配north,一旦匹配到就吧
           所在行寫到tmpfile中。
    
    (9) a: 行追加命令:追加一行資訊到當前行的下一行。在TC shell中,必須有個\在a之後,第一個a是sed所要求的,表示命令尚未結束,轉下一行。 所替換的文本必須單獨放在一行。比如: sed '/^love /a\Hello World!' datafile 在datafile中匹配以love 開頭的行,並在此行後面加入一行文本Hello World!
                       
    (10) i: 行插入命令:如上,但不同的是在匹配行之前插入一行新文本。

    (11) c: 行替換命令:如上,但不同的是用一行新文本替換匹配出的行。
    
    (12) n: 讀取下一行:讀取匹配行的下一行,並進行處理。
            sed '/^love /{n; s/is/was/;}' datafile: 搜尋datafile,匹配出以love 開頭的行,讀取匹配行的下一行
            並用新的sed命令 s/is/was 處理,直到最後一行。

    (13) y: 轉換命令:定義字元轉換的映射關係,並根據映射關係一一進行轉換。
            比如:sed '1,5y/abcdefg/ABCDEFG/' datafile:根據給定的映射關係,將1-5行的a,b,c,d,e,f,g字母轉化為大寫。
            
    (14) q: 退出命令:通知sed停止處理行,並退出。
            比如:sed '5q' datafile: sed 預設輸出前5行,隨之退出。
            又比如:sed '/Lewis/{s/Lewis/Joseph/;q;}' datafile: 首先匹配出Lewis,而後替換Lewis為Joseph,並立刻退出。
    
    (15) h & g: 儲存和提取命令: sed運行時,會維護一個額外的holding buffer用於儲存行,h命令將pattern buffer中的內容 賦值到holding buffer中,g命令則從holding buffer中提取行並處理。比如:sed -e '/love/h' -e '$g' datafile: 在datafile中搜尋love, 將匹配行儲存到holding buffer中,處理到最後一行時,從holding buffer中讀取行資料,並預設輸出。

    (16) h & x: 儲存和替換命令:h功能如上,x將用holding buffer中的行資料替代當前正在處理的行(pattern buffer中的資料)。
    
3.  sed指令碼
    可以將一系列的sed命令寫在一個指令檔中,運行時用命令 sed -f shellfile datafile,則sed會順序讀取datafile中的
    每一行,並用shellfile中的命令處理這一行,直到datafile中的所有行都被處理完成。
    需要注意的是:在每個命令後面不能有空格,否則會報錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.