天天看點

sed指令及vim的末行指令

sed:StreamEDitor,流編輯器,以行為機關對一個或多個檔案進行編輯處理;每一次sed都會處理給定檔案中的一行内容。

在sed處理文本時,将正在處理的目前行存儲到臨時的緩沖區中,稱為“模式空間”;用目前行去比對給定的PATTERN,如果能比對,則使用command編輯處理;如果不比對,則預設輸出至标準輸出;然後繼續處理下一行,直到檔案的末尾。

預設情況下,sed的所有處理行為不會影響源檔案的内容;

我們一般會使用sed指令來自動編輯一個或多個檔案,簡化對檔案的循環操作;

sed指令:

    sed - stream editor for filtering andtransforming text

    sed [OPTION]... 'script' [input-file]...

        常用選項:

            -n, --quiet, --silent:對于不能比對模式的行,預設不輸出到螢幕;

            -e script, --expression=script:多條件編輯;

            -f script-file, --file=script-file:從指定的script-file中讀取腳本

                注意:script-file為一個能夠定位到腳本檔案的路徑,最好為絕對路徑

            -i[SUFFIX], --in-place[=SUFFIX]:原檔案直接編輯操作;

            -r, --regexp-extended:使sed支援擴充正規表達式;

        script:

            'AddressesCommand'

            Addresses(位址定界):

                1.空位址:對所有檔案的所有行進行處理;

                2.單位址:sed對于能夠比對該位址的那唯一一行進行處理;

                   num:表示行号;

                    /pattern/:能夠比對該模式的所有行;

                   $:表示文檔最後一行

                3.位址範圍:

                   addr1,addr2:從addr1開始到addr2結束的中間所有行;

                       例如:2,8

                   first~step:從first标記的行号開始,以step所代表的數字為步長;

                       例如::1~2為奇數行  2~2為偶數行

                   addr1,+N:從addr1開始,包括addr1所在行,并繼續向後計算N行;

                       例如:2,+7比對到的行數為23456789一共八行,相當于2,2+7

                   addr1,~N:從addr1開始,包括addr1所在行,向後計算addr1*N行;

                       例如:2,~5相當于2,2*5

                   /pattern1/,/pattern2/:從被pattern1比對的第一行開始計算,一直到被/pattern2/比對到的第一行結束;

            Command(處理指令):

                =:顯示被模式比對的行的行号

                   例如:sed -n'/^$/=' /etc/grub2.cfg

                a\text:在被模式比對的行的後面追加text的内容,支援使用\n換行,進而實作多行追加;

                i \text:在被模式比對的行的前面插入text的内容,支援使用\n換行,進而實作多行插入;

                c \text:将被模式比對的行的修改為text的内容,支援使用\n換行,進而實作一行變多行;

                d:在模式空間中删除被模式比對的行;這樣的行不能再進行标準輸出;

                   注意:在使用d指令的時候,不宜使用-n選項;

                p:顯示模式空間中被模式比對的行;

                   注意:在使用p指令的時候,通常會搭配-n選項;

                w filepath:将模式空間中被模式比對的行,另存到filepath檔案中;

                r filepath:将filepath檔案的内容追加至模式空間中被模式比對的行之後;

                !Command:在模式空間中被模式比對的行,不執行Command指令;相反,未被模式比對的行,參會執行Command指令

                s///:查找替換,分隔符可以任意更換,隻要相同即可;

                   s@@@, s###, s,,,

                   s/pattern/text/[control]

                   s@/etc/fstab@/etc/mtab@

                   pattern:計劃查找并替換的内容

                   text:要替換的結果

                   control:如何進行替換

                       g:行内全部替換

                       p:顯示替換成功的行

                       w filepath:将替換成功的行另存到filepath檔案中;

                   支援後向引用:

                       s/\(string\)/&/

                       s/\(string\)/\1/

            進階編輯指令:

                h: 把模式空間中的内容覆寫至保持空間中

                H:把模式空間中的内容追加至保持空間中

                g: 從保持空間取出資料覆寫至模式空間

                G:從保持空間取出内容追加至模式空間

                x: 把模式空間中的内容與保持空間中的内容進行互換

                n: 讀取比對到的行的下一行覆寫至模式空間

                N:追加比對到的行的下一行至模式空間

                d: 删除模式空間中的行

                D:删除多行模式空間中的所有行

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