天天看點

Linux shell sed指令使用    sed: Stream Editor 流編輯器d删除查找并替換

Linux處理文本檔案的工具:

    grep        過濾檔案内容

    sed            編輯檔案内容

    awk

            正規表達式Regex

正規表達式Regex

sed在處理文本時是逐行讀取檔案内容,讀到比對的行就根據指令做操作,不比對就跳過。

sed是Linux下一款功能強大的非互動流式文本編輯器,可以對文本檔案進行增、删、改、查等操作,支援按行、按字段、按正則比對文本内容,靈活友善,特别适合于大檔案的編輯。本文主要介紹sed的一些基本用法,并通過shell腳本示範sed的使用執行個體。

(1)比對單個字元的元字元

    .

    [abc]    [a-z]    [A-Z]    [0-9]    [a-zA-Z0-9]    [^a-z]

    [[:alpha:]]        [[:upper:]]        [[:lower:]]     [[:digit:]]

(2)比對字元出現位置

    ^str   以...開頭

    str$   以...結尾

    ^$        空行

(3)比對字元出現的次數

    *    

    \?

    \+

    \{3\}

    \{2,5\}

    \{2,\}

sed: Stream Editor 流編輯器

    行編輯器  逐行編輯

将每行内容讀入到記憶體中,在記憶體中進行處理,将結果傳回給螢幕,此段記憶體空間稱為摸索空間

預設不編寫原檔案,僅對模式空間的資料進行處理,處理結束後,将模式空間的内容顯示到螢幕

sed指令的使用格式

# sed [option] scripts file1 file2...

# sed [option] 'AddressCommand' file1 file ...

    Address:表示對那些進行處理

    Command:操作指令

    option選項:

        -n:不在顯示模式空間的内容(預設顯示)

        -i:直接修改原檔案

        -e:‘AddressCommand’ -e ‘AddressCommand’:同時執行多個比對操作

             [root0shell ~]+ sed -e ‘/^#/d’ -e '/^5/d' /etc/fstab

        -f:FILE将多個AddressCommand儲存至檔案中,每行一個AddressCommand;讀取該檔案中的操作同時執行多個操作

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

Address表示方法:

(1)StartLine, EndLine

    1, 100

    1,$

(2)lineNumber

    3

(3)Startline, tn

    5,+2     /root/,+2

(4)/正規表達式/

    /root/

    /bash$/

(5)/正規表達式1/, /正規表達式2/

    第1次被Regex1比對的行升始,到第1次被Regex2比對的行中同的所有行

d删除

删除前4行

[[email protected] init.d]# sed '1,4d' nginx.sh 
           

删除最後一行

[[email protected] init.d]# sed '$d' nginx.sh 
           

删除#開頭的行

[[email protected] ~]# sed '/^#/d' /etc/fstab
           

删除/開頭的行

[[email protected] ~]# sed '/^\//d' /etc/fstab 
           

删除帶數字的行

[[email protected] ~]# sed '/[0-9]/d' /etc/fstab 
           

p 顯示符合條件的行

 顯示以/開頭的行

[[email protected] ~]# sed -n '/^\//p' /etc/fstab 
           

a  \string  在符合條件的行後追加新行,string為追加的内容

    在以/開頭的行後面追加# hello word

    [[email protected] ~]# sed '/^\//a\# hello word' /etc/fstab 
           

    在以/開頭的行後面分别追加# hello word  # hello linux

    [[email protected] ~]# sed '/^\//a\# hello word' /etc/fstab 
           

i     \string  在符合條件的行前追加新行,string為追加的内容

    在檔案的第一行追加 # hello linux

    [[email protected] ~]# sed '1i \# hello linux' /etc/fstab 
           

c   \string 替換指定的内容

    将檔案中最後一行的内容替換為 end of file

    [[email protected] ~]# sed '$c\end of file' /etc/fstab 
           

=   用于顯示每一行的行号

    顯示/etc/passwd檔案最後一行的行号

    [[email protected] ~]# sed -n '$=' /etc/passwd

           

r  file_name   将指定的檔案的内容添加到符合條件的後面

    将檔案的第二行後面追加/etc/fstab

    [[email protected] ~]# sed '2r /etc/issue' /etc/fstab 
           

w  file_name   将符合條件的内容另存到指定的檔案中

    将以#開頭的行另存到/1.txt中

    [[email protected] ~]# sed '/^#/w /root/1.txt' /etc/fstab 
           

查找并替換

預設情況下,隻替換每一行第一次出現的字元

s  /old/new/[修飾符]

    old:正規表達式/

    new:替換的内容

    修飾符

        g:替換第一行所有的字元

        i:忽略大小寫

查找檔案的UUID,并替換成uuid

[[email protected] ~]# sed 's/UUID/uuid/' /etc/fstab 
           

将行首的/替換成#

[[email protected] ~]# sed 's/^\//#/' /etc/fstab 
           
[[email protected] ~]# sed 's|/|#|g' /etc/fstab 
           

将每一行出現的所有/替換成@

[[email protected] ~]# sed 's/\//@/g' /etc/fstab
           

繼續閱讀