歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux常用命令之sed

Linux常用命令之sed

日期:2017/2/28 13:49:10   编辑:Linux教程

標題:sed命令的使用

作用:sed(stream editer)是以行為單位處理文本數據,可以對數據按行進行選取(顯示打印)、替換、刪除和新增等功能。

工作流程:sed是一個流編輯器,它可以對從標准輸入流中得到的數據進行處理,然後把處理以後得到的結果輸出到標准輸出,而標准輸出通常關聯到終端屏幕,因此處理後的結果也會顯示到屏幕上。當然,也可以把標准輸出重定向到文件,這樣處理後的結果就會保存在磁盤文件中。

一、用法

sed [-nefr] [動作]

參數:

     -n:使用安靜模式,取消自動打印模式空間。在一般來自STDIN的數據一般都會被列出到屏幕上,但如果加上-n參數後,則只有經過sed處理的那一行才會被列出來

   -e:直接在命令行模式上進行sed的動作編輯

   -f:直接將sed動作寫到一個文件內,-f filename可以執行filename內的sed動作

-i:直接修改讀的文件內容,而不是由屏幕輸出

動作說明:

    1. [n1[n2]] function

      1.1 n1,n2一般代表選擇進行動作的行數,10,20代表動作在10,20行間執行。如果不指定n1,n2,則表示後面的[動作]命令作用於與所有的行

      1.2 除了用數字選擇進行動作的行的范圍,也可以用正則表達式,選擇進行操作的行的范圍

        例如:打印顯示所有以"#"開頭的行 sed -n '/^#/p' filename

      1.3 在進行替換命令的時候,一般需要用正則表達式所有行進行模式匹配,只有匹配成功的行,才會執行相應的動作操作

   2. function有下面這參數:

     [1] a : 新增

     [2] c : 替換,c後面可以接字符串,這些字符串可以替換n1,n2之間的行

     [3] d: 刪除

     [4] i: 插入,i之後可接字符串,這些字符串會在新的一行出現

     [5] p: 打印,通常會和-n一起運行

     [6] s: 替換

二、實例

例1:以行為單位的刪除操作:

     命令:nl test.da | sed '2,5d'

     輸出:

例2:在第2行後面添加 "Drink tea\n Drink beer"

     命令: sed '2,a Drink tea \n Drink beer' test.da

輸出:

例3:將第2~5行的內容替換成為"No,2-5 Number"

     命令:sed '2,5c No,2-5 Number' test.da

輸出:

   例4:打印2~5行的內容

    命令:nl index.html | sed -n '2,5p'

輸出:

   例5:打印除2~5行外的其他行

    命令:nl index.html |sed -n '2,5!p

    輸出:

    解釋:打印除了第2~5行外的內容,亦即打印第1行和第6行~最後一行,所以可以用命令:nl index.html | sed -n '1p;6,$p'

   例6:從某一行開始,按照指定的間隔打印文件中的行,比如從第2行開始每隔3行顯示文件的內容

    命令:nl index.html | sed -n '2~3p'

    輸出:

    解釋:單引號中的第一個數字表示起始行數,第二個數字表示間隔數

例7:使用sed的s命令可以對文件中的字符串進行替換

     假設現在要對如下的htm文件中的email地址從[email protected]改成[email protected]以及對年份數字2012進行替換為2013

      <html>

       <title>My homepage</title>
       <body>
       <a href="mailto:[email protected]">Email me!</a>
        <br>
        <p>Page created by:<a href="mailto:[email protected]">[email protected]</a></p>
        <p>copyright @ 2012 mysite!</p>
      </body>
    </html>

     命令:sed -e 's/[email protected]/[email protected]/g' -e 's/\b2012\b/2013/g' index.html

     輸出:

     解釋:sed命令中的-e選項表示指定多個編輯命令,也可以使用";"來連接多個編輯命令。例如,上面的命令也可以表示為:sed 's/[email protected]/[email protected]/g;s/\b2012\b/2013/g' index.html

               g:表示全局替換

               i:表示忽略大小寫

               \b字符串\b表示正則匹配單詞

例8:使用sed命令實現對指定范圍行內的進行行末或行首添加字符

      假設要對某個文件的部分行首或行末添加一定字符或字符串

      命令:sed '1,4s/^./#&/' index.html |nl

     

     解釋:&符號正則表達是所匹配的內容

Copyright © Linux教程網 All Rights Reserved