class8 文本處理工具sed和vim編輯器

一、處理文本的工具sed

    Stream EDitor,  行編輯器

    sed是linux上一款比較重要的流編輯器。

    特點:一次處理一行內容,處理完成后,把緩沖區的內容送往屏幕。這樣不斷重復,直到文件末尾。

    緩存空間:模式空間,當前處理的行存儲在臨時緩沖區;

                     保持空間,當前行處理完成后,還需要等待后續的處理過程,會將該數據存放的空間。

    Sed 主要用來自動編輯一個或多個文件, 簡化對文件的反復操作, 編寫轉換程序等


     sed 工具

       用法:

           sed [option]… 'script' inputfile…

       常用選項:

            -n :不打印非模式空間的內容,靜默模式

[root@6 ~]# sed -n '2p' pass
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@6 ~]# cat pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

            -e:  多點編輯       以后的修改會以之前的修改為基礎

[root@6 ~]# sed  -e '1,5d'  -e 's/bin/BIN/' pass
operator:x:11:0:operator:/root:/sBIN/nologin
games:x:12:100:games:/usr/games:/sBIN/nolog
gopher:x:13:30:gopher:/var/gopher:/sBIN/nologin
ftp:x:14:50:FTP User:/var/ftp:/sBIN/nologin
[root@6 ~]# sed -n -e '1,5p' -e '1p' pass
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

           -f / PATH/TO/SCRIPT_FILE : 從指定文件中讀取編輯腳本

           -r:  支持使用擴展正則表達式

[root@6 ~]# sed -r 's@halt@HALT@g' pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

           -i:  原處編輯

[root@6 ~]# sed -ir 's@halt@HALT@g' pass
[root@6 ~]# cat pass                                       ###修改源文件
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    地址定界:

       (1) 不給地址:對全文進行處理

       (2) 單地址:

          #:  指定的行

          /pattern/ :被此處模式所能夠匹配到的每一行

[root@6 ~]# sed -n '2p' pass  
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@7 ~]# sed -n '/root/p' pass
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

        (3) 地址范圍:

             #,#

[root@7 ~]# sed -n '1,5p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

            #,+#

[root@7 ~]# sed -n '1,+2p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

          /pat1/,/pat2/

[root@7 ~]# sed -n '/^root/,/^adm/p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

         #,/pat1/

[root@7 ~]# sed -n '2,/^adm/p' pass
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

        (4) ~ :步進

            1~2  奇數行

[root@7 ~]# cat -n pass|sed -n '1~2p'
    1	root:x:0:0:root:/root:/bin/bash
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

            2~2  偶數行

[root@7 ~]# cat -n pass|sed -n '2~2p'
    2	bin:x:1:1:bin:/bin:/sbin/nologin
    4	adm:x:3:4:adm:/var/adm:/sbin/nologin
    6	sync:x:5:0:sync:/sbin:/bin/sync
    8	halt:x:7:0:halt:/sbin:/sbin/halt

   

   編輯命令:

       d:  刪除模式空間匹配的行

       p:  顯示模式空間中的內容

       a \text :在行后面追加文本;支持使用\n 實現多行追加

[root@7 ~]# cat -n pass|sed  '2a\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
    2	bin:x:1:1:bin:/bin:/sbin/nologin
abcdp

        i \text :在行前面插入文本;支持使用\n 實現多行插入

[root@7 ~]# cat -n pass|sed  '2i\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
abcdp
    2	bin:x:1:1:bin:/bin:/sbin/nologin

       c \text :替換行為單行或多行文本

[root@7 ~]# cat -n pass|sed  '2c\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
abcdp
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin

       w /path/to/somefile:  保存模式匹配的行至指定文件

[root@7 ~]# sed -n  '1,2wa'  pass
[root@7 ~]# cat a
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

        r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到的行后

[root@7 ~]# sed  '3ra'  pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

        =: 為模式空間中的行打印行號

[root@7 ~]# sed  '='  pass
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin

        !: 模式空間中匹配行取反處理

    [root@7 ~]# cat -n pass|sed -n '1!p'
    2	bin:x:1:1:bin:/bin:/sbin/nologin
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4	adm:x:3:4:adm:/var/adm:/sbin/nologin

     s/// :查找替換, 支持使用其它分隔符,s@@@ ,s###

       替換標記:

        g:  行內全局替換

        p:  顯示替換成功的行

[root@7 ~]# cat -n pass|sed -n 's/root/ROOT/gp'
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin

         w  /PATH/TO/SOMEFILE :將替換成功的行保存至文件中

[root@7 ~]# cat -n pass|sed -n 's/root/ROOT/gpwa'
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin
[root@7 ~]# cat a
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin


   sed 示例

        sed ‘2p’ /etc/passwd             #第2行多打印一次

        sed -n ‘2p’ /etc/passwd           #只顯示第二行

        sed -n ‘1,4p’ /etc/passwd          #只顯示1~4行

        sed -n ‘/root/p’ /etc/passwd        #只顯示包含root的行

        sed -n ‘2,/root/p’ /etc/passwd       #從2 行開始

[root@7 ~]# sed -n '2,/root/p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

         sed -n ‘/^$/=’ file  顯示空行行號

[root@7 ~]# sed -n '/^$/=' a  
3
5
[root@7 ~]# cat a
a
b
c
d

         sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

[root@7 ~]# sed -n -e '/^$/p' -e '/^$/='   a
3
5

         sed ‘/root/a\superman’ /etc/passwd   #在root行后增加superman

[root@7 ~]# sed '/root/a\superman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman

        sed ‘/root/i\superman’ /etc/passwd     #在root行前增加superman

        sed ‘/root/c\superman’ /etc/passwd     #用superman覆蓋包含root的行

        sed ‘/^$/d’ file                 #刪除空行

        sed ‘1,10d’ file                 #刪除1~10行

        nl /etc/passwd | sed ‘2,5d’

    [root@7 ~]# nl /etc/passwd | sed '2,5d'
    1	root:x:0:0:root:/root:/bin/bash
    6	sync:x:5:0:sync:/sbin:/bin/sync
    7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

        

        nl /etc/passwd | sed ‘2a\ tea’

[root@7 ~]# nl /etc/passwd | sed '2a\ tea'
    1	root:x:0:0:root:/root:/bin/bash
    2	bin:x:1:1:bin:/bin:/sbin/nologin
tea

       sed 's/test/mytest/g' example          #用mytest替換所有的test

       sed –n‘s/root/&superman/p’ /etc/passwd  單詞后

[root@7 ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

      sed –n‘s/root/superman&/p’ /etc/passwd  單詞前

[root@7 ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

    sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets    #首先用cat替換dog,然后用lo替換hi

    sed –i.bak ‘s/dog/cat/g’ pets    備份

[root@6 ~]# sed -i.bak '/^ftp/d' pass
[root@6 ~]# cat pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nolog
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@6 ~]# cat pass.bak
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nolog
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nologin:x:4326:4327::/home/nologin:/bin/bash mage:x:4327:4328::/home/mage:/bin/bash wang:x:4328:4329::/home/wang:/bin/bash


  高級編輯命令:

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

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

    g:  從保持空間取出數據覆蓋至模式空間

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

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

    n:  讀取匹配到的行的下一行覆蓋至模式空間

    N :追加匹配到的行的下一行至模式空間

    d:  刪除模式空間中的行

    D :刪除多行模式的首行

    sed 示例

     sed -n 'n;p' FILE                #顯示偶數部分

[root@6 ~]# cat a
1
2
3
4
5
[root@6 ~]# sed -n 'n;p' a
2
4

      sed '1!G;h;$!d' FILE               #逆序顯示    

[root@6 ~]#  sed '1!G;h;$!d' a
5
4
3
2
1

     sed '$!N;$!D' FILE                 #顯示正序最后兩行

[root@6 ~]# sed '$!N;$!D' a
4
5

     sed '$!d' FILE                    #顯示尾行

[root@6 ~]# sed '$!d' a
5

     sed ‘G’ FILE                    #在每行后加空行

[root@6 ~]# sed 'G' a
1
2
3
4
5

    sed ‘g’ FILE                      #將所有行變為空行顯示

[root@6 ~]# sed 'g' a

    sed ‘/^$/d;G’ FILE                  #將原文件空行刪除,為每行重新添加一個空行

[root@6 ~]# sed '/^$/d;G' a
1
2
3
4
5

   sed 'n;d' FILE                       #顯示奇數行

[root@6 ~]# sed 'n;d' a
1
3
5

   sed -n '1!G;h;$p' FILE                  #逆序顯示文檔

[root@6 ~]# sed -n '1!G;h;$p' a
5
4
3
2
1


二、vim 編輯器

    簡介

            vim編輯器是linux上一款出色的文本編輯器,功能強大,現在學習的僅是冰山一角,已經可以感覺出它的魅力所在。

            功能強大意味著操作命令,方式繁多;對于初學者不友好。但是,如果可以熟練使用,可以說是如虎添翼。

    vi: Visual Interface ,文本編輯器

    文本:ASCII, Unicode

    文本編輯種類:

    行編輯器: sed

    全屏編輯器:nano, vi

                vim – Vi Improved

          其他編輯器:

    gedit:一個簡單的圖形編輯器

    gvim:一個 Vim 編輯器的圖形版本


    打開文件

     # vim  [OPTION]… FILE…

    +#:  打開文件后,直接讓光標處于第# 行的行首

    +/ PATTERN :打開文件后,直接讓光標處于第一個被PATTERN 匹配到的行的行首

    vim + file  直接打開file, 光標在最后一行

    vim –b file  二進制方式打開文件

    vim –d file1 file2… 比較多個文件

[root@6 ~]# vim -d pass pass1

2016-8-10 2.JPG

    vim -m file 只讀打開文件,不做修改

         ex file 或 vim –e 直接進入ex 模式

     [root@6 ~]# vim -d pass pass1
[root@6 ~]# vim -e pass
"pass" 8L, 342C
進入 Ex 模式。輸入 "visual" 回到正常模式。

    如果該文件存在,文件被打開并顯示內容

    如果該文件不存在,當編輯后第一次存盤時創建它

 關閉文件

    擴展模式:


    :q  退出

    :q!  強制退出,丟棄做出的修改

    :wq  保存退出

     :x  保存退出  

    

    命令模式:


    ZZ:  保存退出

    ZQ:不保存退出


vim 模式

    vim :一個模式編輯器

           三種主要模式:

    命令模式(默認):移動光標,剪切/ 粘貼文本

    插入(編輯)模式:修改文本

    擴展命令模式 :保存,退出等

         編輯模式—輸入模式—末行模式

         命令模式—插入模式—擴展模式

   模式轉換

     命令模式 –>  插入模式

        i: insert,  在光標所在處輸入

        I :在當前光標所在行的行首輸入

        a: append,  在光標所在處后面輸入

        A :在當前光標所在行的行尾 輸入

        o:  在當前光標所在行的下方打開一個新行

        O :在當前光標所在行的上方打開一個新行

     插入模式 —->  命令模式

          ESC

     命令模式 —->  擴展模式

           :

     擴展模式 —->  命令模式

             ESC   ESC

      鎖定和解鎖:

                        CTRL+s,  鎖定

                        CTRL+q   解鎖

  命令模式光標跳轉

    字符間跳轉:

        h: 左  l: 右  j: 下  k: 上

    #COMMAND :跳轉由# 指定的個數的字符;

        5h,

        6l,

        7j,

        8k

    單詞間跳轉:   WEB

        w :下一個單詞的詞首

        e :當前或下一單詞的詞尾

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

    #COMMAND :由# 指定一次跳轉的單詞數

        5w,

        6e

        7b

    當前頁跳轉:

           H :頁首

           M:頁中間行

            L  : 頁底

          

    行首行尾跳轉:

        ^:  跳轉至行首的第一個非空白字符;

        0:  跳轉至行首

        $:  跳轉至行尾

    行間移動:

           #G 、

           擴展模式:#  :跳轉至由# 指定行

           G :最后一行

           1G, gg:  第一行

    句間移動:

           ) :下一句 ( :上一句

    段落間移動:

           }: 下一段 { :上一段

    命令模式翻屏操作  BFUD

            Ctrl+b:  向文件首部翻一屏

          Ctrl+f:  向文件尾部翻一屏

            Ctrl+u :向文件首部翻半屏

          Ctrl+d:  向文件尾部翻半屏


命令模式操作

   字符編輯

    x: 刪除光標處的字符;

    #x: 刪除光標處起始(后)的#個字符

    5x

    6x

    xp: 交換光標所在處的字符及其后面字符的位置 #xp:多個字符替換位置

        #command  

abcdef      xp  
bacdef
abcdef      5xp  
fabcde

 

    ~: 轉換大小寫

       #command  

abcedf         ~  光標所在處的字符
Abcdef
abcedf        6~  
ABCDEF

  替換命令(r, replace)

    r:  替換光標所在處的單個字符

      #command

123456  ra      光標所在處的字符
a23456
uucp:x:10:14     3r5
555p:x:10:14

    R: 切換成REPLACE 模式(連續輸入替換

123456        	RABCDEFG
ABCDEF  
           -- 替換 --

  刪除命令

    d: 刪除命令,可結合光標跳轉字符,實現范圍刪除;

    d$:  刪除到行尾

    d^: 刪除 到非空行首

    d0: 刪除到行首

    dw:

    de:

    db:

        #COMMAND  +方向鍵      刪除方向指向行和字符

                                  ?    #個字符

                                  ?     #行

      dd:  刪除光標所在的行

           #dd :多行刪除(之后的行)

      D: 從當前光標位置一直刪除到行尾,留空行,等同于d$

   復制命令(y, yank):

    y:  復制,行為相似于d 命令

    y$

    y0

    y^

    ye

    yw

    yb

     #y   光標以下#行,不包括光標所在行

     yy :復制行

     #yy:  復制多行

                 Y:  復制整行

   粘貼命令(p, paste):  P

                        p

    p:緩沖區存的如果為整行,則粘貼當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面

    P:緩沖區存的如果為整行,則粘貼當前光標所在行的上方;否則,則粘貼至當前光標所在處的前面        

           

P 整行,當前光標所在行的上方
其他,當前光標所在處的前面
整行,當前光標所在行的下方 p
其他,粘貼至當前光標所在處的后面

   改變命令(c, change)

        c:  修改后切換成插入模式

        命令模式 –>  插入模式

        c$

        c^

        c0

        cb

        ce

        cw

          #COMMAND  +方向鍵    刪除方向指向行和字符

                              ?    #個字符

                              ?    #行

        cc :刪除當前行并輸入新內容

            #cc:

        C :刪除當前光標到行尾,并切換成插入模式

  命令模式

     100iwang [ESC]      粘貼“wang ”100次


     <start position><command><end position>

      Command:

      y  復制、d  刪除、gU  變大寫、gu  變小寫

    例如 0y$  命令意味著:

    0 → →  先到行頭

    y → →  從這里開始拷貝

    $ → →  拷貝到本行最后一個字符

     ye  從當前位置拷貝到本單詞的最后一個字符

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin         #0gU$
UUCP:X:10:14:UUCP:/VAR/SPOOL/UUCP:/SBIN/NOLOGIN

 撤消更改

    u 撤銷最近的更改

    #u 撤銷之前多次更改

     U  撤消光標落在這行后所有此行的更改

     Ctrl +r 重做最后的“撤消”更改

    . 重復前一個操作

    n. 重復前一個操作n次

      5. 執行五次操作


 擴展模式

    按“: ”進入Ex 模式

    創建一個命令提示符:, 處于底部的屏幕左側

    命令:

    w  寫(存)磁盤文件

    wq  寫入并退出

    x  寫入并退出

    q 退出

    q!  不存盤退出,即使更改都將丟失

    r   filename  讀文件內容到當前文件中

      :r  pass

2016-8-10 3.JPG

    w    filename 將當前文件內容寫入另一個文件

    !    command           #vim中執行命令, enter退出 。繼續編輯文本

    r!   command           #vim中執行命令,并將命令結果存入文本中            

2016-8-10 1.gif

擴展模式:地址定界

    地址定界

    :start_pos,end_pos

    #:  具體第# 行,例如2 表示第2 行;

    #,#:  從左側# 表示行起始,到右側# 表示行結尾

    #,+#:  從左側# 表示的行起始,加上右側# 表示的行數

       :2,+3 表示2 到5行

    .  :  當前行

    $ :  最后一行

         .,$-1  當前行到倒數第二行

    % :全文,  相當于1,$

        /pat1/,/pat2/

             從第一次被pat1模式匹配到的行開始,一直到第一次被pat2 匹配到的行結束

        #,/pat/

        /pat/,$

             使用方式:后跟一個編輯命令

        d

        y

        w    file:  將范圍內的行另存至指定文件中

        r     file :在指定位置插入指定文件中的所有內容

     查找     (與man幫助命令相同) 可以使用正則表達式

        /PATTERN :從當前光標所在處向文件尾部查找

        ?PATTERN :從當前光標所在處向文件首部查找

        n :與命令同方向

        N :與命令反方向

     查找并替換

    s: 在擴展模式下完成查找替換操作

       格式:s/ 要查找的內容/ 替換為的內容/ 修飾符

       要查找的內容:可使用模式

          替換為的內容:不能使用模式,但可以使用\1, \2, …等后向引用符號;還 可以使用“&”引用前面查找時查找到的整個內容

        修飾符:

        i:  忽略大小寫

        g: 全局替換;默認情況下,每一行只替換第一次出現

        gc: 全局替換,每次替換前詢問

            查找替換中的分隔符/ 可替換為其它字符,例如

          %s@/etc@/var@g

          %s#/boot#/#i


 vim寄存器

    有26 個命名寄存器和1 個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。

    用a ,b,…,z 表示, 用寄存器表示,放在數字和命令之間

      如:3"tyy  表示復制3 行到t 寄存器中

              "tp 表示將t 寄存器內容粘貼

      4"aY                                                                                      
復制了 4 行  
     "ap
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
多了 4 行

2016-8-10 4.JPG

    未指定,將使用無命名寄存器

    有10 個數字寄存器,用0 ,1 ,… ,9 表示,0 存放最近復制內容,1 存放最近刪除內容。當新的文本變更和刪除時,1 轉存到2 ,2 轉存到3 ,以此類推。數字寄存器不能在不同會 話間共享。

 

 編輯二進制文件

     以二進制方式打開文件

          vim –b binaryfile

[root@6 ~]# vim -b /bin/cat

2016-08-10 1.JPG

     擴展命令模式下,利用xxd 命令轉換為可讀的十六進制

           :%!xxd

  :%!xxd
0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 3e00 0100 0000 5018 4000 0000 0000  ..>.....P.@.....
0000020: 4000 0000 0000 0000 b8b5 0000 0000 0000  @...............
0000030: 0000 0000 4000 3800 0900 4000 2000 1f00  ....@.8...@. ...
0000040: 0600 0000 0500 0000 4000 0000 0000 0000  ........@.......
0000050: 4000 4000 0000 0000 4000 4000 0000 0000  @.@.....@.@.....
0000060: f801 0000 0000 0000 f801 0000 0000 0000  ................
0000070: 0800 0000 0000 0000 0300 0000 0400 0000  ................
0000080: 3802 0000 0000 0000 3802 4000 0000 0000  8.......8.@.....

    

    編輯二進制文件

    擴展命令模式下,利用xxd 命令轉換回二進制

          :%!xxd –r

:%!xxd –r
^ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@P^X@^@^@^@^@^@@^@^@^@^@^@^@^@<b8><b5>^@^@^@^@^@^@
^@^@^@^@@^@8^@     ^@@^@ ^@^_^@^F^@^@^@^E^@^@^@@^@^@^@^@^@^@^@@^@@^@^@^@^@^@@^@@^@^@^@^@^@<f8
>^A^@^@^@^@^@^@<f8>^A^@^@^@^@^@^@^H^@^@^@^@^@^@^@^C^@^@^@^D^@^@^@8^B^@^@^@^@^@^@8^B@^@^@^@^@


 可視化模式

     允許選擇的文本塊

          v  面向字符

          V 面向行

           ctrl-v  面向塊

        -- 可視 --
       -- 可視 行 --  
       -- 可視 塊 --

     可視化鍵可用于與移動鍵結合使用:

     w ,)  ,},箭頭等

    突出顯示的文字可以被刪除,復制,變更,過濾,搜索 / 替換等

 多文件模式

     vim FILE1 FILE2 FILE3 …

    :next  下一個

    :prev  前一個

    :first  第一個

    :last  最后一個

    :wall  保存所有

    :qall  退出所有

    :wqall

   

 使用多個“窗口”

     多文件分割

    vim -o|-O FILE1 FILE2 …

    -o:  水平分割

    -O:  垂直分割

    在窗口間切換: Ctrl+w, Arrow

[root@6 ~]# vim -o  pass pass1

2016-8-10 5.JPG

     單文件窗口分割:

    Ctrl+w,s: split,  水平分割

    Ctrl+w,v: vertical,  垂直分割

    ctrl+w,q :取消相鄰窗口

    ctrl+w,o: 取消全部窗口

    : wqall 退出


定制vim 的工作特性

    配置文件:永久有效

    全局:/etc/vimrc

    個人:~/.vimrc

    擴展模式:當前vim 進程有效

    (1)  行號

    顯示:set number,  簡寫為set nu

    取消顯示:set nonumber,  簡寫為set nonu

     (2)  括號成對匹配

    匹配:set showmatch,  簡寫為set sm

    取消:set nosm

    (3)  自動縮進

    啟用:set ai

    禁用:set noai

    (4)  高亮搜索

    啟用:set hlsearch

    禁用:set nohlsearch

    (5)  語法高亮

    啟用:syntax on

    禁用:syntax off

    (6)  忽略字符的大小寫

    啟用:set ic

    不忽略:set noic

    (7)  文件格式

    啟用: :fileformat=unix

    不忽略: : fileformat=dos

    (8)  設置文本寬度

    :set textwidth=65 (vim only)

    :set wrapmargin=15

    :help option-list

    :set or :set all

了解更多

    vi/vim 內置幫助

    :help

    :help topic

    Use :q to exit help

    Vimtutor


練習

1 、如何設置tab 縮進為4 個字符

  vim   ~/.vimrc

   set tabstop=4

2016-8-10 6.JPG

2 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄;替換/tmp/functions 文件中的/etc/sysconfig/init 為/var/log;

%s@/etc/sysconfig/init@/var/log@g
###替換之后的
# Read in our configuration
if [ -z "${BOOTUP:-}" ]; then
 if [ -f /var/log ]; then
     . /var/log
 else
   # This all seem confusing? Look in /var/log,

3 、刪除/tmp/functions 文件中所有以# 開頭,且# 后面至少有一個空白字符的行的行首的# 號;:

%s@^#\([[:space:]]\+\)@\1@g
40 次替換,共 40 行    
:?^#[[:space:]]\+
E486: 找不到模式: ^#[[:space:]]\+

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

(0)
lvasulvasu
上一篇 2016-08-11
下一篇 2016-08-11

相關推薦

  • 如何修改linux系統主機名稱及自動登錄圖形化界面

    編輯器:gedit(圖形化編輯器)在圖形界面編輯開機自動登錄圖形化界面(在工作中不能使用)Centos6  第一步:ls /etc/gdm/custom.conf第二步:nano /etc/gdm/custom.conf第三步:[daemon]第四步:AutomaticLoginEnable=trueAutomaticLogin=root第五步:按…

    Linux干貨 2017-07-15
  • 馬哥教育網絡班21期+第一周課程練習

    1、描述計算機的組成及其功能。 計算機由五大組件組成包括:計算器,控制器,存儲,輸入設備,輸出設備。 運算器:做運算,且只能做二進制運算,包括算術運算和邏輯運算,如加減乘除,移位,取模。運算器的核心是加法器。 控制器:控制整個計算機部件之間協調。比如做計算,運算器先從存儲器取數,運算器作運算,再回存存儲器。這整個過程都由控制器做協調。  &nbsp…

    Linux干貨 2016-07-12
  • Linux簡介和基礎

    一、系統和硬件 無論是Linux、OS X、Windows操作系統,他們都是由以下部分組成(分層結構): 最底層:硬件 底層之上:將硬件的接口抽象成為系統調用(kernel) 再之上:庫 再此之上為:應用程序 程序的運行可以有兩種方式: 1、開機自動啟動運行 2、用戶通過交互式接口登陸或者連接系統上去,來手動運行程序 二、終端: 1、物理終端:我們可以將顯示…

    Linux干貨 2017-09-02
  • Code Review中的幾個提示

    Code Review應該是軟件工程最最有價值的一個活動,之前,本站發表過《簡單實用的Code Review工具》,那些工具主要是用來幫助更有效地進行這個活動,這里的這篇文章,我們主要想和大家分享一下Code Review代碼審查的一些心得。 首先,我們先來看看Code Reivew的用處: Code reviews 中,可以通過大家的建議增進代碼的質量。 …

    Linux干貨 2015-04-03
  • 馬哥教育網絡班22期+第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel/ /home/tuser1/ ~]# chmod 700 /home/tuser1/ -R 2、編輯/e…

    Linux干貨 2016-09-06
  • Python基礎—內置數據類型

    一、簡介              如果你用過C或者C++,你該知道你的許多工作集中在實現數據結構上面。你需要管理內存分配,部署內存結構等等。這些東西比較乏味,通常會讓你無法集中在真正想實現的目標上面。    …

    Linux干貨 2015-11-10
欧美性久久久久