文本處理三劍客之sed及vi編輯使用

作用:

      sed是Linux系統文本處理工具中的三劍客之一,它是一種流編輯器,以行為單位,能夠使用正則表達式;跟其他文本處理工具模式相同,不對原文件直接操作,而是先借用一個臨 時的數據緩沖區存放文文本數據,同時還有一個自己獨特的空間"pattern space",我們稱之為sed的模式空間,它的處理流程是:

           (1)首先是逐行讀取文本,放到模式空間中;

           (2)判斷模式空間是否被sed模式匹配到到:

           (3)如果能夠被sed模式匹配到要執行sed編輯命令,默認把結果輸出到標準輸出(stdout);

           (4)如果不能夠被sed模式匹配到,默認也把沒有匹配到的內容輸出到stdout;

           (5)同時如果不執行-d命令刪除模式空間中的內容時,默認會把模式空間中的內容輸出到stdout

語法格式:

         sed [options]…'script' [input-file]…

            script:是sed模式匹配條件,也叫sed腳本,由地址定界和編輯命令組成; 

                 (1)地址定界:指的是要操作的文本行范圍;

                 (2)編輯命令:指的是要對匹配到的文本范圍執行什么樣編輯命令;

常見選項:[option


         -n :不輸出模式空間的內容到stdout;sed默認是要把模式空間中的內容輸出到stdut;

         -e 'script' :可以指定多個匹配模式條件,實現多點編輯;

         -f script-file :可以把匹配模式條件寫到文件中,直接引用文件讀取;

         -r :支持使用擴展正則表達式,模式使用基本正則表達式;

         -i :直接對原文件執行編輯修改,操作非常危險,可以-i.bak,可以同時先備份以原文件跟.bak結尾的文件;

      

地址定界分類:

       

          (1)空地址:

      

             以全文匹配處理;

          (2)單地址:

         

             # :指定行號;

      

             /pattern/ :被模式匹配到的所有行;

          (3)范圍地址:

             #,#         :指定以前一個#開頭的行到后一個以#結束的行所有行;

               

             #,+#       :指定以第#開始的行在跟#個行,5,+5:表示從第五行開始在跟5行,總共匹配 11 行,包括指定開始的行;

      

            #,/pattern/ :指定從#開頭,到第一個被/pattern/匹配到的中間所有行;

     

            /pattern1/,/pattern2/ :從第一個被/pattern1/匹配到的行開始到第一被/pattern2/匹配到的行結束中間的所有行;

          (4)步進地址:

       

             1~2:指定所有奇數行;

             2-2:指定所有偶數行;

          

編輯命令:

       

          d :刪除地址定界指定的行

          p :打印模式空間中的行輸出到stdout;一般結合選項-n,效果看起來有變化;

          a\string :在匹配到的地址定界行下面添加string內容,內容中使用"\n",可以實現換行;

          i\string :在匹配到的地址定界行上面添加string內容,使用"\n"實現換行;

          c\string :把匹配到的地址定界行替換成新行string內容;

          s///或者s@@@ :在指定的地址定界中搜索指定字符并替換;其中替換標記如下

            

                g:行內全局替換;

                w /path/file :將替換成功的結果保存至指定文件中;

                p:顯示替換成功的行;

         r /path/file :讀入其他文件的行到指定的地址定界中;

         w /path/file :保存模式空間中匹配到的行至指定文件;

        

         = :為模式空間中匹配到的行打印行號;

        

         !:條件取反;格式:地址定界!編輯命令;

sed高級使用:sed除了有一個模式空間以外,還有一個空間叫hold space保持空間;通過命令實現模式空間與保持空間中的行來回操作,達到特定編輯功能;

sed高級編輯命令:

        

        h :把模式空間中的內容覆蓋到保持空間中;

        

        H :把模式空間中的內容追加到保持空間中;

     

        g :把保持空間中的內容覆蓋到模式空間中;

    

        G :把保持空間中的內容追加到模式空間中;

        x :兩個空間內容置換;

        n :讀取匹配到的行的下一行到模式空間中,匹配到行會被覆蓋;

   

        N :讀取匹配到的行的下一行追加到模式空間中;匹配到行不會被覆蓋;

   

        d :刪除模式空間中的行;

      

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

vi編輯器:

      它是一款強大的文本編輯工具,用在命令行模式下,其中vim是vi的升級版本,功能更加完善,其中的對系統配置定義的語法高亮檢查很是實用;熟練掌握使用后,對系統管理維護工作中對文本的操作效率非常高,所有平時要注意多練習,而且vimtutor命令可以引導練習在里面操作;

   

 1.vi模式:

       編輯器也跟其他模式化文本處理工具一樣,不是直接對原文件進行修改操作,先把文本數據讀取到自己的vi工作空間中;其實vi有三個模式,不同模式實現的功能不同;下面介      紹:

        

        (1)編輯模式:默認打開文件后進入編輯模式,在這里可以實現復制刪除替換查找等命令;      

            (2)輸入模式:在這里可以直接對文本進行編輯寫等操作;

        (3)末行模式:在這里可以使用末行模式命令對文本進去處理操作;

 2.vi模式切換:

        (1)編輯模式–>輸入模式

           i:在當前光標所在字符的前面轉換為輸入模式;

           I:在當前光標所在行的行首轉換為輸入模式;

           a:在當前光標所在字符的后面轉換為輸入模式;

           A:在當前光標所在行的行尾轉換為輸入模式;

           o:在當前光標所在行的下方插入一個新行轉換為輸入模式;

           O:在當前光標所在行的上方插入一個新行轉換為輸入模式;

        (2)輸入模式–>編輯模式

            ESC按鍵;

        (3)編輯模式–>末行模式

           輸入冒號:

        (4)末行模式–>編輯模式

           ESC按鍵,快速切換可以按兩下ESC按鍵;

3.打開文件:

        語法格式 

           vim [options] [file ..]

        vi + :打開定位文件最后一行

        vi +[num] :打開文件定位到指定行

        vi +/pattern :打開文件定位到第一次被模式匹配到的行;

       

        file:注意如果實現沒有這個文件,就創建這個文件為新文件,不能跟目錄同名;

4.關閉文件:

        (1)末行模式關閉文件

           :q 退出

           :q! 強制退出不保存;

           :w 保存;

           :w! 強制保存;

           :wq 保存并退出;

           :x 保存并退出;

        (2)編輯模式下退出

           ZZ 保存并退出;

5.在編輯模式中移動光標:

        (1)逐字符移動:

           h <– 向左

           l –> 向右

           j  v  向上

           k  ^  向下

           注意:可以[num]h,l,j,k,指定移動多少個字符;

             ^

             k              

       < h       l >               

             j                     

             v

        (2)以單詞為單位移動

            w: 移至下一個單詞的詞首

            e: 跳至當前或下一個單詞的詞尾

            b: 跳至當前或前一個單詞的詞首

           注意:可以[num]w,e,b,跟移動多少個單詞

 

       (3)行內跳轉:

            0: 絕對行首

            ^: 行首的第一個非空白字符

            $: 絕對行尾

       (4)行間跳轉

            gg:跳至第一行;

            G:跳至最后一行;

            [num]G:跳至指定行;

           

        (5)末行模式 [num] 直接給定行號

          

        (6)在編輯模式下翻屏

            Ctrl+f: 向下翻一屏

            Ctrl+d: 向下翻半屏

            Ctrl+b: 向上翻一屏

            Ctrl+u: 向上翻半屏

6.編輯模式下刪除

        (1)刪除單個字符;

             x:刪除光標所在處的單個字符;

            [num]x:指定向光標所在到向后的指定個字符;

        (2)刪除命令d

            dd:刪除當前光標所在整行

            d0:刪除當前光標其前到當前行首的所有字符;

            d$:刪除當前光標其后到當前行尾的所有字符;

            dw:刪除當前光標所在的單詞;

            [num]dw:刪除當前光標向后的指定單詞個數;

            de:刪除當前光標所在的單詞包括所在其后的單詞; 

            [num]de:刪除當前光標所在的單詞包括其后指定單詞的個數;

            db:刪除當前光標所在其前的單詞;

            [num]db:刪除當前光標其前指定的單詞個數;

7.末行模式刪除操作:

        :startADD,endADDd

          . 表示當前行

          $ 表示最后一行;

          +[num] 表示從當前向下指定的行數;

8.編輯模式下黏貼命令p

       p: 如果刪除或復制為整行內容,則粘貼至光標所在行的下方,如果復制或刪除的內容為非整行,

          則粘貼至光標所在字符的后面;

       P: 如果刪除或復制為整行內容,則粘貼至光標所在行的上方,如果復制或刪除的內容為非整行,

          則粘貼至光標所在字符的前面; 

        

9.編輯模式下復制命令y

            yy:復制當前光標所在整行

            y0:復制當前光標其前到當前行首的所有字符;

            y$:復制當前光標其后到當前行尾的所有字符;

            yw:復制當前光標所在的單詞;

            [num]yw:復制當前光標向后的指定單詞個數;

            ye:復制當前光標所在的單詞包括所在其后的單詞; 

            [num]ye:復制當前光標所在的單詞包括其后指定單詞的個數;

            yb:復制當前光標所在其前的單詞;

            [num]yb:復制當前光標其前指定的單詞個數;

       

10.編輯模式下修改命令c:先刪除內容,再轉換為輸入模式

            cc:刪除當前光標所在整行;進入輸入模式

            c0:刪除當前光標其前到當前行首的所有字符;進入輸入模式

            c$:刪除當前光標其后到當前行尾的所有字符;進入輸入模式

            cw:刪除當前光標所在的單詞;進入輸入模式

            [num]cw:刪除當前光標向后的指定單詞個數;進入輸入模式

            ce:刪除當前光標所在的單詞包括所在其后的單詞;進入輸入模式 

            [num]ce:刪除當前光標所在的單詞包括其后指定單詞的個數;進入輸入模式

            cb:刪除當前光標所在其前的單詞;進入輸入模式

            [num]cb:刪除當前光標其前指定的單詞個數;進入輸入模式    

    

11.編輯模式下替換命令r

            r:替換單個字符;    

            R:替換單個單詞替換后進入輸入模式

12.編輯模式下撤銷命令u

            u:撤銷前一次編輯操作;

            連續uu可撤銷此前多次編輯操作

            #u:撤銷最近#次編輯操作;

13.編輯模式下重復前一次操作命令.

        . 重復前一次編輯操作;

14.可視化光標選取模式:

            v:逐字符選取;

            V:矩形選取;

15.末行式下查找

            /pattern 從當前光標所在處向下查找

                n 對查找到的內容向下跳轉

                N 對查找到的內榮向上跳轉;

            ?pattern  從當前光標所在處向上查找;

                N 對查找到的內容向下跳轉

                n 對查找到的內榮向上跳轉; 

  

16.查找并替換在末行模式下使用s命令

            ADDR1,ADDR2s@PATTERN@string@gi

            $:最后一行

            %:表示全文             

           .:表示當前行

           $:表示最后一行;

            #:指定行

            +[num] 表示從當前向下指定的行數;

            

            修飾符;

            g:全局替換

            i:忽略大小寫; 

   

17.使用vim編輯多個文件

           vim FILE1 FILE2 FILE3

           :next 切換至下一個文件

           :prev 切換至前一個文件

           :last 切換至最后一個文件

           :first 切換至第一個文件

           :qa 部退出

18.屏顯拆分

           Ctrl+w, s: 水平拆分窗口

           Ctrl+w, v: 垂直拆分窗口

           在窗口間切換光標:

           Ctrl+w, hljk

           :qa 關閉所有窗口

19.分窗口編輯多個文件

          vim -o : 水平分割顯示

          vim -O : 垂直分割顯示

20.末行模式下使用w命令:

        將當前文件中部分內容另存為另外一個文件;

       :w

       :ADDR1,ADDR2w /path/to/somewhere

21.末行模式下使用r命令:

        將另外一個文件的內容填充在當前文件中

        :r /path/to/somefile

22.跟shell交互

        :! COMMAND

23.高級功能

        1、顯示或取消顯示行號

           顯示:set nu

           取消:set nonu

        2.顯示忽略或區分字符大小寫

           顯示:set ignorecase

           取消:set noic

 

        3.設定自動縮進

           開啟:set autoindent

               :set ai

           關閉:set noai

   

        4.查找到的文本高亮顯示或取消

           顯示:set hlsearch

           取消:set nohlsearch

        5.語法高亮

           顯示:syntax on

           關閉:syntax off

24.配置文件

        /etc/vimrc:定義全局配置文件,對所有用戶生效;

        ~/.vimrc :定義用戶個人配置文件,只對單用戶生效; 

原創文章,作者:xiashixiang,如若轉載,請注明出處:http://www.www58058.com/32841

(0)
xiashixiangxiashixiang
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相關推薦

  • RAID簡介

    RAID是什么? RAID英文名字叫Redundant Arrays of Independent Disks,也叫磁盤陣列?陣列有是什么意思?通俗的理解就是把很多的硬盤組織在一起來使用。       RAID可以根據性能來劃分為兩種:有無冗余(容錯)能力     &n…

    Linux干貨 2016-02-14
  • centos啟動流程

    linux系統啟動流程 內核的設計結構單內核:linux(線程–lwp輕量級進程)微內核:windows(支持真正意義上的多線程) 單內核:很多功能驅動都集成在一起 微內核:內核很小,功能單一。模塊化 linux為了適應眾多用戶的不同硬件需求,linux內核在設計上采用模塊化設計。可以動態加載模塊。核心模塊:ko 內核所獨有的。共享對象:so 紅…

    Linux干貨 2016-09-09
  • 行編輯器sed的應用

    sed sed:Stream EDitor,行編輯器 sed是一種流編輯器,它一次處理一行內容,處理時,把當前處理的行存儲在臨時緩沖區中, 稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后, 把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒 有改變,除非你使用重定向存儲輸出。 se…

    Linux干貨 2016-08-10
  • oracle6.7使用udev作為asm

    1、需求 oracle6.7使用udev作為asm /dev/sdb <–> /dev/asm-diskb /dev/sdc <–> /dev/asm-diskc /dev/sdd <–> /dev/asm-diskd /dev/sde <–> /dev/asm-…

    Linux干貨 2016-07-29
  • Grep 文本搜索工具與正則表達式

            grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,并默認輸出匹配行。Grep在實際中對于我們的工作有著很大的作用,用于對文件的搜索,通過由正則表達式字符以及…

    2017-04-15
  • 架構師第一天之:Nginx

    nginx: 誕生背景: prefork機制不能支持過大的并發請求, C10K問題的解決 官方站點: http://nginx.org 二次開發版: tengine,openresty 特性: 模塊化設計,較好的拓展性 高可靠性:master/worker架構 支持熱部署:不停機更新配置文件,更換日至文件,更新服務器版本 低內存消耗:10000個keep-a…

    Linux干貨 2016-10-29
欧美性久久久久