天天看點

sed 指令使用 (筆記)

linux 三大文本處理工具 grep sed awk

之前有說過grep 今天來看看sed指令

簡介

    sed (Stream EDitor)流編輯器,是非互動式的編輯器,它一次處理一行内容。而且此編輯器預設不會對原檔案做修改,如果想要修改使用shell重定向儲存結果。預設情況下,所有的輸出行都會被列印在螢幕上。

    sed 編輯器逐行處理檔案(或輸入),并将結果發送到螢幕上。處理過程如下:

    首先sed 把目前正在處理的行儲存在一個臨時的緩沖區中(也稱為模式空間pattern space),然後處理臨時緩沖區中的行,完成後把該行發送到螢幕上。 sed 每處理完一行就将其緩沖區删除,然後将下一行讀入,進行處理和顯示。處理完輸入檔案的最後一行後,sed便運作結束。sed 每一行都存在臨時緩沖區中,對這個副本進行編輯,是以不會修改原檔案。

sed 基本格式

sed [option] "AddressCommand" file

Address

    大義是指定該檔案中的哪一行或者被定位到的行,支援正規則表達式,數字。如果沒有指定行,則預設為處理所有行。

startlike,endline 例

        1,100 則定位到文本中的第一行到100行

        $ 表示最後一行

        $-1 表示倒數第二行

2. /RegExp/ 中間是正規則表達式 例

        /^root/ 比對以root開頭的行

3. /pattern/,/pattern2/ 比對從第一次被pattern1比對到的行,到第一次被pattern2比對到的行結束這中間的所有行

4. LineNumber 隻給一個數字,則精确比對到該行

5. startline,+N N是數字  表示從startline 行開始向後比對N行。

Command

這個是對前邊所比對到的行做字處理 ,比如删除,修改,替換等等

d 删除符合條件的行 

a \"string" 可不加引号, 在符合條件的行的後面追加新行,内容為string. \n 是換行符

i \"string" 可不加引号, 在符合條件的行的前面追加新行,内容為string. string 的意思是這個地方你輸出什麼,則為該行後邊添加什麼。

p 顯示符合條件的行,預設情況下會使符合的行數顯示兩次(這個是因為patter space的原因)

r FILE 将指定的檔案的内容添加到符合條件的行處

w FILE 将位址指定的範圍内的的行另存至指定的檔案中

s/parttern/string/ 查找和替換 替換預設隻替換每行中被第一次模式比對到的字元串

    如果都把模式比對到的都替換需加修飾符

    g 表示全局替換(global)

    i 忽略大小寫 ignore

s/// 分隔符可用其它特殊字元替換如 s@@@ s### 

&表示引用前邊模式比對中的字元串 

\(\) 後向引用

[option]

這個是可選選項,即可用也可以不用這個選項

-n 靜默模式,不再預設顯示模式空間中的内容。

-i 直接修改原檔案

-e 可以同時執行多個腳本 

即sed -e "AddressCommand" -e "AddressCommand" -e "AddressCommand" File 

-f FILE 把sed腳本執行到指定的檔案

-r 表示使用擴充正規表達式

sed 練習 

1. 删除/etc/grub.conf檔案中行首的空白字元

sed 's/^[[:space:]]*//' /etc/grub.conf

2. 替換/etc/inittab檔案中“id:3:initdefault:“一行中的數字為5

sed 's/\(id:\)3/\15/' /etc/inittab 

3. 删除/etc/inittab檔案中的空白行(由于我linux系統是由#加空白字元組成的行是以我的是删除#開頭整行空白的行)

sed '/^#[[:space:]]*$/d' /etc/inittab 

4. 删除/etc/inittab檔案中開頭的$号

sed 's/^#//' /etc/inittab 

 5. 删除某檔案中開頭的$号以及後面的空白字元,但要求#号後面必須有空白字元的才删除

sed 's/^#[[:space:]]//' PATH

本文轉自Winthcloud部落格51CTO部落格,原文連結http://blog.51cto.com/winthcloud/1629995如需轉載請自行聯系原作者

Winthcloud

繼續閱讀