第六章,文本處理工具和正則表達式

更多筆記點擊查看

Linux學習從入門到打死也不放棄,完全筆記整理(持續更新)

https://blog.51cto.com/13683480/2095439


筆記整理起始時間:2018年4月7日14:15:07

 

本章內容:

各種文本工具來查看、分析、統計文本

cat,tac,rev,more,less,head,tail,cut,paste,wc,uniq,sort,diff

grep

正則表達式

擴展正則表達式

vim

 

支持標準輸入的命令|

        cat tr mail bc

        more less head tail cut wc sort uniq grep

 

抽取文本的工具

        文本內容:less和cat

        文本截取:head和tail

        按列抽取:cut

        按關鍵字抽取:grep

        

文件查看命令:

        cat,tac,rev

        cat -E           顯示行結束符$

               -n           對顯示出的每一行進行編號

               -A          顯示所有控制符

               -b          非空行編號

               -s           壓縮連續的空行成一行

        tac file    上下反向查看文件

        rev file    左右反向查看文件

 

分頁查看文件內容:

        more:                 分頁查看文件

        more -d file    顯示翻頁及退出提示

        less                 一頁一頁地查看文件或stdin輸出

               查看時有用的命令包括:

               /文本       搜索文本

               n/N        跳到下一個或上一個匹配

               less命令爲man命令默認使用的分頁工具

        

顯示文本前或後行內容

        head file         默認查看文件前10行

               -c1000           指定獲取前1000字節

               -n#               指定獲取前#行

               -#                 指定前#數 (跟-n#好像沒什麼不同)

        

        tail file            默認查看文件後10行

               -c50              指定獲取後50個字節

               -n#               指定獲取後#行

               -#                  指定獲取後#行

               -f                   跟蹤顯示文件fd新追加的內容,常用於日誌監控

                                           但是文件如果被刪除,無法發現

               -F                   跟蹤文件名,相當於--follow=name  --retry

                                           當文件被刪除時會受到提示

        tailf file          類似於tail -f,當文件不增長(比如刪除)時並不訪問文件

 

按列抽取文本cut,合併文件paste

        cut [option]...[file]...

               -d“”          指明分隔符,默認tab

               -f filed    指明第幾列

                     #                   第#個字段

                     1,5                 第1和第5列

                     1-5                第1-5列

                     1-3,5             第123,5列

               -c1-15,              按字符切割

               

               cut -d: -f6-7 /etc/passwd     

                     以冒號爲分隔符取/etc/passwd的第6-7列

               cut -d: -f1,7 /etc/passwd /etc/shadow|cat -n

                     以冒號爲單位/etc/passwd和/etc/shadow的第1和第7列 且顯示行數

                      --output-delimiter=STRING        指定輸出分隔符

               如:

                     cut  -d: -f1-3 --output-delimiter=@  /etc/passwd

                            以:爲分隔符取etc/passwd 第1-3列,且輸出以@爲分隔符

        

               cut -c1-14,30-45 /etc/profile

                     取/etc/profile 每行1-14 30-45個字符

        

        paste [option]...[file]...     合併兩個文件同行號的列到一行

               -d"" 指定分隔符,默認用tab

               -s          所有的行合成一行顯示

               paste f1 f2             行合併

               paste -s f1 f2       列顯示變行顯示

 

分析文本的工具:

        wc:文本數據統計

               計算單詞總數,行總數,字節總數和字符總數

               可以對文件或者stdin中的數據運行

               wc /etc/profile

                     76           252       1795       /etc/profile

                     行數       單詞數    字節數

               常用選項

                     -l     只計算行數

                     -w   只計算單詞總數

                     -c 只計算字節總數

                     -m 只計算字符總數

                     -L 顯示文件中最長行的長度

        

        sort:文本排序sort

               把整理過的文本顯示在stdout,不改變原始文件

               sort files       默認是按字符排序文件

               常用選項:

                     -r   反向排序

                     -R   隨即排序

                     -n   執行按數字大小整理

                     -f    選項忽略(fold)字符串中的字符大小寫

                     -u   選項(獨特,unique)刪除輸出中的重複行

                     -t"#"       使用#作爲字段界定符

                     -k"X"      按照使用#字符分隔的第X列來整理,能夠使用多次

               例:

                     cut -d: -f1-3  /etc/passwd|sort -t: -k3 -n

                            以:爲分隔符取/etc/passwd前3列,且按照uid數字大小排序

 

uniq命令:

        uniq:從輸入中刪除前後相接的重複的行

        uniq [option]...[file]...

               -c            顯示每行重複出現的次數

               -d          僅顯示重複過的行

               -u        僅顯示不曾重複的行

               注意:連續且完全相同方爲重複

        常和sort命令一起配合使用:

               sort userlist.txt |uniq -c

                    

比較文件:

        比較兩個文件之間的區別

               diff file1 file2

                     比較文件,會標記不同的行

                             1,51c1,51,表示1-51行有區別

               diff命令的輸出被保存在一種叫做“補丁“的文件中

                     使用  -u  選項來輸出“統一的(unified)"diff格式文件,最適合用於補丁文件

               patch 複製在其他文件中進行的改變(要慎重使用)

                     適用  -b 選項來自動備份改變了的文件

               例:

               diff -u f11 f22 > f33.diff

               rm -rf file1

               patch -b f22 f33.diff

                     使用f11 f22的diff文件f33.diff恢復f11文件

                            原f22文件會被改名備份爲f22.orig,f22文件即爲原f11文件

               

練習1:

        1.找出ifconfig 網卡名 命令結果中本機的IPv4地址

               ifconfig ens33|head -n2|tail -n1|tr -s " " |cut -d" "  -f3

        2.查出分區空間使用率的最大百分比值

               df|tr -s " " "%"|cut -d"%" -f5|sort -nr|head -n2|tail  -n1

        3.查出用戶UID最大值的用戶名、UID及shell類型

               cat /etc/passwd|cut -d: -f1,3,7|sort -nr -t":" -k2|head  -1

        4.查出/tmp的權限,以數字方式顯示

               stat /tmp|head -n4|tail -1|cut -d: -f2|tr -dc "[:digit:]\n"

        5.統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序

               netstat -nt|tr -s " "|cut -d" " -f5|uniq -c|tr -s ' ' |sort -nr  

               -c"" -k2

               cat access_log |cut -d' ' -f1|sort|uniq -c|sort -nr

 

Linux文本處理三劍客

        grep:文本過濾(模式:pattern)工具

               grep,egrep,fgrep(不支持正則表達式搜索)

        sed:stream editor,文本編輯工具

        awk:linux上的實現gawk,文本報告生成器

 

grep:Global search  Regular expression and Print out the line

        作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查

               打印匹配到的行

        模式:由正則表達式字符及文本字符所編寫的過濾條件

        grep [options] pattern [file]...

               例:

               grep root /etc/passwd          在/etc/passwd 中搜索含有root的行並輸出

               grep "$USER" /etc/passwd    在/etc/passwd中搜索當前用戶,並輸出行

               grep '$USER' /etc/passwd    在/etc/passwd中搜索字符$USER,並輸出行

               grep `whoami`  /etc/passwd 支持命令調用如`whoami`

               ls |grep ok                                 在ls的輸出結果中匹配含有“ok”的選項並輸出

        

        --color=auto:      對匹配到的文本着色顯示

        -v                          取反,顯示不被pattern匹配到的行

        -i                           忽略字符大小寫

        -n                         顯示匹配的行數

        -c                          統計匹配的行數,僅顯示行數,不輸出匹配到的信息

        -o                         僅顯示匹配到的字符串

        -q                         靜默模式,不輸出任何信息,

                                    結果存在變量 $? 中,有匹配爲0,沒有匹配爲1

        -A#:after         連同匹配到的行數的後#行一起輸出

        -B#:befor           連同匹配到的行數的前#行一起輸出

        -C#:context 前後#行一起輸出

        -e:                     實現多個選項間的邏輯or關係

               grep -e 'cat' -e 'dog' file

        -w                         匹配整個單詞,僅包含的不輸出,如只匹配roo,就不會輸出root

                                    字母數字下劃線都算單詞的一部分,其他符號爲分隔符

        -E                          使用ERE(擴展正則表達式)

        -F                          相當於fgrep,不支持正則表達式

        

        grep -f  file 匹配文件中的pattern,或關係

        i 特殊顯示,會在行首顯示文件名

        $?,存儲上一個命令的返回值,ture爲 0,錯誤爲非0

        

正則表達式:

        man 7 regex

        regexp:由一類特殊字符及文本字符所編寫的模式(pattern),其中有些字符

        (元字符)不表示字符字面意義,而表示控制或通配的功能

        程序支持:grep,sed,awk,vim,less,nginx,varnish等

        分兩類:

               基本正則表達式:BRE

               擴展正則表達式:ERE

                     grep -E ,  egrep支持擴展正則表達式

        正則表達式引擎:

               採用不同算法,檢查處理正則表達式的軟件模塊

               PCRE(Perl Compatible Regular  Expreesions)

        元字符分類:

               字符匹配,匹配次數,位置錨定,分組

        

字符匹配:

               .                     匹配任意單個字符

               [abcA-Z1-5]    匹配指定範圍內的任意單個字符

               [^abc]             匹配指定範圍外的任意單個字符

               [:alnum:] 字母和數字

               [:alpha:]  代表任何英文大小寫字符,A-Z,a-z

               [:lower:]  小寫字母

               [:upper:]  大寫字母

               [:digit:]    十進制數字

               [:xdigit:]   十六進制數字

               [:blank:]  空白字符(空白和製表符)

               [:space:]  水平和垂直的空白字符(比[:blank:]包含的範圍廣)

               [:cntrl:]     不可打印的控制字符(退格,刪除,警鈴。。。)

               [:graph:]  可打印的非空白字符

               [:print:]    可打印字符

               [:punct:]  標點符號

        例:

               ls|grep ...      顯示所有三個字符,多餘部分不會標紅

               ls|grep "..."     顯示3個字符組成的單詞

        

        ps:[.]放在中括號裏面就是.本身

匹配次數:

        用在要指定次數的字符後面,用於指定前面的字符要出現的次數

               *              匹配前面的字符任意次,包括0次

                                    貪婪模式:儘可能長的匹配

               .*             任意長度的任意字符

               \?           匹配其前面的字符0次或1次

               \+           匹配其前面的字符至少1次

               \{n\} 匹配前面的字符n次

               \{m,n\}     匹配其前面的字符至少每次,至多n次

               \{,n\}        匹配前面出現的字符至多n次

               \{n,\}        匹配前面出現的字符至少n次

               

位置錨定:

        定位出現的位置

               ^                                  行首錨定,用於模式的最左側

               $                                  行尾錨定,用於模式的最右側

               ^pattern$                     用於模式匹配整行

                     ^$                               空行

                     ^[[:space:]]*$         空白行

               \< \b                            詞尾錨定,用於單詞模式的左側

               \> \b                            詞尾錨定,用於整個單詞的右側

               \<pattern\>                  匹配整個單詞

 

分組:

        \(\)   將一個或者多個字符捆綁在一起,當做一個整體進行處理,如:

               \(root\)\+               匹配root最少出現一次

                     echo rootroot  |grep -o  "\(root\)\+"

        分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中

        這些變量的命名方式爲;\1, \2, \3...

                     echo rootpppproot|grep -o  "\(root\).*\1"

        \1    表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

        示例:

               \(string1\+\(string2\)*\)

                     \1:string\+\(string2\)*

                     \2:string2

               後項引用:引用前面的分組括號中的模式所匹配的字符,而非模式本身

        

        或者:\|

               示例a\|b a或b

               C\|cat             C或cat

               \(C\|c\)at Cat或cat

 

練習2:

        1.顯示/proc/meminfo文件中以大小s開頭的行(要求使用兩種方法)

               cat /proc/meminfo |grep -i ^s

               cat /proc/meminfo |grep "\(^s.*\)\|\(^S.*\)"

        2.顯示/etc/passwd文件中不以/bin/bash結尾的行

               cat /etc/passwd|grep -v "/bin/bash\>"

        3.顯示用戶hello默認的shell程序

               getent passwd hello|cut -d: -f7

               getent passwd hello|grep -o "/.*\>"

        4.找出/etc/passwd文的兩位或三位數

               cat /etc/passwd|grep -o "\<[0-9]\{2,3\}\>"|cat -n   

        5.顯示Centos7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面

        有非空白字符的行

               cat /etc/grub2.cfg|grep "^[[:space:]]\+.*..*$"

        6.找出"netstat-tan"命令結果中以LISTEN後跟任意多個空白字符結尾的行

               netstat -tan|grep "LISTEN[[:space:]]\+$"

        7.顯示CentOS7上所有系統用戶的用戶名和UID

               getent passwd|cut -d: -f1,3

        8.添加用戶bash、testbash、basher、sh、nologin(其shell爲/sbin/nologin)

        找出/etc/passwd用戶名和shell同名的行

               getent passwd|grep "^\(..*\)\>.*\<\1$"

        9.利用df和grep,取出磁盤各分區利用率,並從大到小排序

               df|grep dev/sd|tr -s ' ' |cut -d' ' -f1,5|sort -t' ' -k2  -nr

                     保留磁盤名稱

               df|grep dev/sd|grep -o "[0-9]\+%"|sort  -nr

                     不保留磁盤名稱

 

egrep:

        egrep = grep -E

        egoup [options] pattern [file...]

        支持擴展的正則表達式

               

擴展的正則表達式的元字符:

        字符匹配:

               .                     任意單個字符

               [abc]               指定範圍的字符

               [^abc]            不在指定範圍的字符

               [:alnum:] 。。。。

        

        次數匹配:

               *                     匹配前面字符任意次

               ?                   匹配前面字符0或1次

               +                    1次或多次

               {m}                匹配m次

               {m,n}             至少m次,至多n次

        

        位置錨定:

               ^                   行首

               $                   行尾

               \< \b              單詞首

               \> \ba             單詞尾

        

        分組:

               ()               分組

               \1,\2              後項引用

        或者:

               a|b                 a或者b

               C|cat              C或cat

               (C|c)at    Cat或cat

        

練習3:

        1.顯示三個用戶root、mage、wang的UID和默認shell

               cat /etc/passwd|egrep "^(root)\>|^(hello)\>|^(lily)"|cut -d:  -f1,3,7

               getent passwd root hello lily|cut -d: -f1,3,7

        2.找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟

        一個小括號的行

               cat /etc/rc.d/init.d/functions |egrep  "^[[:alpha:]]+.*\>\(\)"

        3.使用egrep取出/etc/rc.d/init.d/functions中其基名和目錄名

               echo /etc/init.d/functions/ |egrep -o  "\<[[:alpha:]]+/?$"

               echo /etc/init.d/functions |egrep -o  "/.*\>/"

        5.統計last命令中以root登錄的每個主機IP地址登錄次數

               last|egrep "^root\>"|tr -s ' ' |cut -d' ' -f3|sort|uniq  -c

        6.利用擴展正則表達式分別表示0-9,10-99,100-199,200-249,250-255

               [0-9]       [1-9][0-9] 1[0-9][0-9]    2[0-4][0-9]      25[0-5]

        7.顯示ifconfig命令結果中所有ipv4地址

               ifconfig |egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

               ifconfig |egrep -o "\<(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"  

        8.將此字符串:welcome to magedu linux  中的每個字符去重並排序,重複次數

        多的排到前面

               echo welcome to magede linux|tr -d ' '|grep -o  .|sort|uniq -c|sort -nr

 

               

vim簡介:

        vi:visual interface,文本編輯器

        文本:ASCII,unicode

        文本編輯種類:

               行編輯器:sed

               全屏編輯器:nano,vi

               vim:vi improved

        其他編輯器:

               gedit       一個簡單的圖形編輯器

               gvim       一個vim編輯器的圖形版本

 

vim:打開文件

        vim [option]...file...

               vim +# file             打開文件後,讓光標處於第#行的行首,

                     +                   默認最後一行的的行首

               +/pattern              打開文件後,直接讓光標處於第一個被pattern匹配到的

                                           行的行首

               -b   file          二進制方式打開文件

               -d file1 file2... 比較多個文件,會顯示不同的位置

               -m file          只讀打開文件

        ex file 或者vim -e       直接進入ex模式

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

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

 

vim:模式

        三種主要模式:

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

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

               擴展命令(extended command)模式:保存,退出等

        R:改寫模式

        Esc鍵退出當前模式

        ese ese 總是返回到命令模式

        

模式轉換:

        命令模式-->插入模式

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

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

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

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

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

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

        

        插入模式-->命令模式

               Esc

        

        命令模式-->擴展命令模式

               :

        

        擴展命令模式-->命令模式

               Esc,enter

 

關閉文件:

        擴展模式:

               :q                 退出

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

               :wq              保存退出

               :x                 保存退出

        命令模式:

               ZZ                 保存退出

               ZQ                不保存退出

 

擴展模式:

        :進入ex模式

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

        命令:

               w                   寫(存)磁盤文件

               wq                  寫入並退出

               x                     寫入並退出

               q                   退出

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

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

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

               !cmd               執行命令

               r!cmd             讀入命令的輸出

 

命令模式光標跳轉:

        字符間跳轉:

               h:   左     

               l:    右

               j:    下

               k:    上

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

                     比如33j,向下跳33行

        

        單詞間跳轉:

               w:下一個單詞的詞首

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

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

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

        

        當前頁跳轉:

               H: 頁首

               M:頁中間行

               L:   頁底

        

        行首行尾跳轉:

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

               0:   跳轉至行尾

               $:     跳轉至行尾

        

        行間移動:

               ##G,(擴展模式:#):      跳轉至由##指定行

               G:                                     最後一行

               1G,gg                                  第一行

        

               句間移動

                     )      下一句

                     (      上一句

        

        段落間移動:

               }      下一段

               {      上一段

        

命令模式:

        翻屏操作:     

               ctrl+f             向文件尾部翻一屏

               ctrl+b            向文件首部翻一屏

               ctrl+d            向下半屏

               ctrl+u           向上半屏

        

        字符編輯:

               x                     刪除光標處字符

               #x                  刪除光標處起始的#個字符

               xp                   交換光標所在處的字符及其後面字符的位置

               ~                    轉化大小寫

               J                     刪除當前行後的換行符

        

        替換命令:

               r                     替換光標所在處的字符

               R                  切換成Replace,改寫模式

        

        刪除命令:

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

               d$                  刪除至行尾

               d^                  刪除到非空行首

               d0                  刪除到行首

               dw                  向右刪除一個單詞

               de                  向右刪除一個單詞

               db                  向左刪除一個單詞

        dd                  刪除光標所在的行

               #dd:      多行刪除

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

        dG        :從當前行刪除到最後1行
        dgg        :從當前行刪除到第1行

        

        複製命令:

               y                    複製,行爲相似於d命令

               y$                   從光標處複製到行尾

               y0                   從光標處複製到行首

               y^                  複製到非空行首

               ye                   拷貝後一個單詞

               yw

               yb                  拷貝前單詞

        yy                   複製整行

               #yy         複製多行

        Y                    複製整行

        yG        :從當前行復制到最後一行
        ygg        :從當前行復制到第一行       



        粘貼命令:

               p:緩衝區存的如果爲整行,則粘貼當前光標所在行的下方;否則,則粘貼

                     至當前光標所在處的後面

               P:緩衝區存的如果爲整行,則粘貼當前光標所在行的上方;否則,則粘貼

                     至當前光標所在處的前面

        

        改變命令:

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

               

               命令模式--->插入模式

                     c$           刪除至行尾,並切換成插入模式

                     c^

                     c0

                     cb

                     cw

                      #command

               cc                   刪除當前行並輸入新內容

                     #cc         多行刪除並輸入新內容

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

               

        其他操作

               100iwang【esc】         粘貼wang  100次

               <stat position><command><end  position>

                      command:

                            y 複製    d 刪除   gU 變大寫 gu 變小寫

                     例如:

                     0y$  命令意味着:

                     0     先到行頭

                     y     從這裏開始拷貝

                     $     拷貝到本行最後一個字符

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

 

擴展命令模式:

        地址定界:

               :start_pos,end_pos

               :#  (y,d..)              具體第幾行,例如:2表示第2行,可以直接進行復制、刪除等

               :#,@(y,d..) 從第#行起,到第@行止,執行命令

               :#,+@(y,d..)      從第#起,到第#+@行

                                           如:2+5,表示從第2行到第7行

               :.                        表示當前行

               :$                        最後一行

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

               :%                 全文

                     如:%d   刪除全文

        

        匹配:支持正則表達式

               /pat1/,/pat2/   

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

               #,/pat/           第#行到被匹配行

               /pat/,$            被匹配行到最後一行

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

                     d

                     y

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

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

        查找:

               /pattern  從光標處向文件尾部查找

               ?pattern        從光標處向文件首部查找

               n:          與命令同方向,下一個

               N:         與命令反方向,上一個

               

        查找並替換:

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

                     格式:

                            定界#.#s/要查找的內容/替換爲的內容/修飾符

                                    %s/haha/xixi/i

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

                      替換爲的內容:不能使用模式,但可以使用\1,\2,等後項引用符號

                            還可以使用&引用前面查找時查找到的整個內容

                            如:

                                   1,5s/haha/&ya/    

                                           將1-5行的haha替換成hahaya

                                    %s/^\(UUID\)/#\1/   

                                           將UUID開頭的行加註釋,(替換成#UUID)

                                    52s/\(feee\)/\1\1/

                                           將第52行的feee替換成feeefeee

                     修飾符:

                            i:忽略大小寫

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

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

                    

                     查找替換中的分隔符/可替換爲其他字符

                            例如:

                                    s@/etc@/etc/var@g

                                    s#/boot#/root#i

練習4:

        1.複製/etc/profile至/tmp/目錄,用查找替換命令刪除/emp/profile文件中

        的行首的空白字符

               :%s/^[[:space:]]\+//

        2.複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲

        /tmp/functions的每行開頭爲空白字符的行的行首添加一個#號

               :%s/^\([[:space:]]\+\)/#\1/

               

命令模式:撤銷更改

        u            撤銷最近的更改

        #u         撤銷之前多次更改

        U             撤銷光標落在這行後所有此行的更改

        ctrl -r     重做最後一次的“撤銷”更改(取消撤銷)

        .             重複前一個操作

        n.           重複前一個操作n次

        

vim的寄存器:

        vim有26個命名寄存器和1個無名寄存器,常存放不同的剪貼板內容,可以不同

        會話間共享

               (需要複製之後關掉會話然後在另外一個會話使用p,或者複製之後重新打開新會話複製。可能。。。)

        寄存器名稱a,b,c...z,

               格式:

                     "寄存器名     放在數字和命令之間

               如:

                     3"tyy       表示複製3行到t寄存器中

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

        

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

        有10個數字寄存器,用0,1,2,..,9表示,0存放最近刪除內容。1存放最近刪除內容,

        當新的文本變更和刪除時,1轉存到2,2轉存到3,以此類推,數字寄存器不能在

        不同會話間共享

        

        編輯二進制文件:

               以二進制方式打開文件:

                     vim -b  binaryfile

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

                     :%!xxd

               編輯二進制文件

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

                     :%!xxd  -r

               保存退出

        

可視化模式:

        允許選擇的文本塊:

               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,箭頭

        

        單個文件窗口分割:

               ctrl+w,s          水平分割

               ctrl+w,v         垂直分割

               ctrl+w,q         取消相鄰窗口

               ctrl+w,o         取消全部窗口

               :wqall                 存退

               

定製vim的工作特性:

        配置文件:永久有效

               全局:/etc/vimrc

               個人:~/.vimrc

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

        (1)行號

               顯示:set number,簡寫爲set  nu

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

        (2)忽略字符的大小寫

               啓用:set ic

               不忽略:set noic

        (3)自動縮進

               啓用:set ai

               禁用:set noai

        (4)智能縮進

               啓用:set smartdent,簡寫set  si

               禁用:set nosi

        (5)高亮搜索

               啓用:set hlsearch

               禁用:set nohlsearch

        (6)語法高亮

               啓用:syntax on

               禁用:syntax off

        (7)顯示tap 和換行符 ^I 和$顯示

               啓用:set list

               禁用:set nolist

        (8)文件格式

               啓用windows格式 set  fileformat=dos

               啓用unit格式:   set fileformat=unix

               簡寫:set ff=dos|unix

        (9)設置文本寬度

               啓用:set textwidth=65(vim  only)

               禁用:set wrapmargin=15

        (10)設置光標所在行的標識線

               啓用:set cursorline,簡寫cul

               禁用:set no cursorline

        (11)複製保留格式

               啓用:set paste

               禁用:set nopaste

 

瞭解更多:

        set幫助

               :help option-list

               :set or set all

        vim內置幫助

        vimturor 練習文件

        

        

練習5:

        1.在vim中設置tap縮進爲4個字符

               

        2.複製/etc/rc.d/init.d/functions文件至/tmp目錄,替換/tmp/functions

        文件中的/etc/sysconfig/init爲/var/log

               :%s@/etc/sysconfig/init@/var/log@

        3.刪除/tmp/functions文件中所有以#開頭,且#後面至少有一個空白字符的行

        的行首的#號

               :%s@^#\([[:space:]]\+\)@\1@

        

 

 

筆記整理完成時間:2018年4月10日18:57:14

        

        

        

        

        

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章