1. 程式人生 > >文字處理小工具SED用法

文字處理小工具SED用法

  • SED是什麼
    SED是Stream EDitor的縮寫,也就是SED是一個流編輯器。它的處理方式和Gvim/emacs完全不一樣。更多的是將SED用作文字處理而不是文字編輯。
  • SED用法說明
    一般linux系統都會內建SED命令。輸入sed會打印出help資訊。從help資訊可以看到其用法如下:
  • sed [options]... 'command' files...

    sed的options說明:
    -n : 等效- -quiet,- -silent,靜默模式,取消自動列印模式空間
    -e ‘expr’: 等效 - -expression= ‘expr’,將腳步表示式新增到執行列表。
    -f srcipt.f : 等效- -file= srcipt.f.新增指令碼檔案到執行列表
    -i: 等效- -in-place,直接修改檔案
    -r: 腳步中開啟擴充套件正則表示式支援
    上述為主要的選項說明,其他的選項可檢視help得到詳細資訊。

  • SED處理原理
    SED以行為單位進行處理,當前處理的行存放在臨時快取區,稱為模式空間(pattern space),sed依次處理模式空間內容,並輸出到終端,如此迴圈直到處理完所有的行。
    為了只對感興趣的行進行處理,需要使用定址,定址:定位到想要編輯的行,如1,5表示1到5行,/test/ 匹配到test的行。定址可以使用數字和正則表示式匹配並且可以混合使用。
  • SED支援的命令
    a\:當前行加入一行。eg
    sed '$a\\#this is the end' test.txt
    其中 ’$’匹配最後一行,‘\’使用需要進行轉義。命令會在檔案最後一行後添加註釋’#this is the end’
    i\:當前行前加入一行。eg
    sed '1i\\#add a header' test.txt

    d:刪除。eg
    sed '2,$d' test.txt
    除了第一行外,其他行被刪除
    p:列印。預設sed會將模板空間列印到終端,因此使用’p’命令會列印兩次。需要結合-n選項進入靜默模式,則只打印定址的或匹配的行。
    s/re/sting: 替換命令,用string的字串替換正則表示式re。
    g:行內全面替換。eg
    sed 's/PATH/path/g' test.txt
    將所有的PATH替換成path。
    r:讀檔案
    sed '1r include.h' include.c
    將檔案include.h的內容新增到include.c的第一行下面。
    w:寫檔案
    sed '1w include.h' include.c

    將include.c的第一行寫入到include.h。
  • SED常見元字符集
    ^:行首
    $:行尾
    .:任意一個字元
    *:0個或多個字元
    []:指定範圍字元
    [^]::不在指定範圍字元,取非操作
    (..):儲存匹配字元
    &:搜尋匹配字串儲存值。eg:
    s/david/hello & /
    將david替換為hello david
    \<:詞首
    >:詞尾
    x{m}:重複x字元m次。
    x{m,}:重複x字元最少m次。
    x{m,n}:重複x字元m~n次。