文本處理三劍客之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
下一篇 2016-08-11

相關推薦

  • 有關磁盤管理與文件系統

    硬盤物理結構      扇區  磁頭  磁道   柱面   磁道數      扇區*一個磁道上的扇區個數*磁頭數=柱面      柱面*磁道數=硬盤大小      一個扇區512字節   &…

    2017-08-19
  • ?N25第三周作業

    第三周 一、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@zf ~]# who | cut -d " " -f1  | sort | uniq -…

    Linux干貨 2016-12-14
  • 數組,字符串處理,mktemp命令,install命令,bash的環境配置文件,程序包編譯

    數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。 數組名和索引 索引:編號從0開始,屬于數值索引 注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持。 bash的數組支持稀疏格式(索引不連續) 聲明數組: declare -a ARRAY_NAME(普通數組可以不加聲…

    Linux干貨 2016-08-24
  • LVS入門

    隨著互聯網進入尋常百姓家,網絡流量愈來愈大,大規模的網路訪問如果都使用一個服務器提供服務,那么網絡通訊注定會擁堵不堪。為了解決這些問題,達到使網絡流量均衡地分散到各個服務器上的目的,一些技術大牛發明了LVS負載均衡技術。   LVS簡介   LVS(Linux Virtual Server)即為Linux虛擬服務器,使由章文嵩博士主導開發…

    Linux干貨 2017-05-09
  • Linux文件系統權限詳解

    一、綜述 在用戶和組的管理中介紹了Linux系統是用戶多任務的分時操作系統,這意味著同時可以有多人在同一臺pc上進行不同的操作。為了能夠保護每個用戶的數據安全,針對不同的用戶設置相應的權限是非常重要的。 Linux文件系統權限主要針對三類用戶: 文件的所有者: owner,用u標識 文件的所有組:group,用g標識 其他人: other,用o標識。不包含在…

    Linux干貨 2016-08-04
  • 文件查找與壓縮

    文件查找與壓縮   Locate:非事實查找(數據庫查找)     查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db 依賴于事先構建的索引; 索引的構建是在系統較為空閑時自動進行(周期性任務); 管理 員手動更新數據庫(updatedb);   工作特點: 查找…

    Linux干貨 2016-08-18
欧美性久久久久