1. 程式人生 > >文字處理(grep、sed)、正則表示式、vim基礎

文字處理(grep、sed)、正則表示式、vim基礎

文字處理三劍客:(grep、sed)
                grep命令:Global search REgular expression and Print out the line
                    grep [options]pattern [file...]
                    例:
                        grep root /etc/passwd
                        grep "$USER" /etc/passwd
                        grep '$USER' /etc/passwd
                        grep `whoami` /etc/passwd

                    選項:
                        --color=auto 對匹配到的文字著色顯示
                        -v :顯示不被pattern匹配到的行
                        -i :忽略字元大小寫
                        -n :顯示匹配的行號
                        -c :統計匹配的行數
                        -o :僅顯示匹配到的字串
                        -q :靜默模式,不輸出任何資訊
                        -A #:after,後#行
                        -B :before,前#行
                        -C :context,前後各#行
                        -e :實現多個選項間的邏輯or關係
                            例:
                                grep -e 'cat' -e 'dog' file
                        -w :匹配整個單詞
                        -E :使用ERE
                        -F :相當於fgrep ,不支援正則表示式
                        -f file : 根據模式檔案處理

                    例:
                        grep root /etc/passwd
                        grep "$USER" /etc/passwd
                        grep '$USER' /etc/passwd
                        grep `whoami` /etc/passwd

                sed命令:(Stream EDitor)行編輯器
                    sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。然後讀入下行,執行下一個迴圈。如果沒有使諸如‘D’的特殊命令,那會在兩個迴圈之間清空模式空間,但不會清空保留空間。這樣不斷重複,直到檔案末尾。檔案內並沒有改變,除非你使用重定向儲存輸出。

                    sed [option]... 'script' inputfile...
                    常用選項:
                        -n : 不輸出模式空間內容到螢幕,及不自動列印
                        -e : 多點編輯
                        -f /PATH/SCRIPT_FILE :從指定檔案中讀取編輯指令碼
                        -r :支援使用擴充套件正則表示式
                        -i .bak :備份檔案並原處編輯
                    script:
                        地址命令
                    地址定界:
                        1、不給地址:對全文進行處理
                        2、單地址:
                            #:指定的行、$ :最後一行
                            /pattern/:被此處模式所能夠匹配到的每一行
                        3、地址範圍:
                            #,#
                            #,+#
                            /pat1/,/pat2/
                            #,/pat1/
                        4,~:進步
                            1~2 奇數行
                            2~2 偶數行
                    編輯命令:
                        d :刪除模式空間匹配的行,並立即啟用下一輪迴圈
                        p :列印當前模式空間內容,追加到預設輸出之後
                        a[\]text :在指定行後面追加文字,支援使用\n實現多行追加
                        i[\]text :在行前面插入文字
                        c[\]text :替換行為單行或者多行文字
                        w /path/fiel :儲存模式匹配的行至指定檔案
                        r /path/fiel :讀取指定檔案的文字至模式空間中匹配到行後
                        = :為模式空間中的行列印行號
                        ! :模式空間中匹配行取反處理
                    查詢替換:
                        s/// :查詢替換,支援使用其他分隔符,s%%%
                        替換標記:
                            g :行內全域性替換
                            p :顯示替換成功的行
                            w /PATH/FILE :將替換成功的行儲存至檔案中


            基本正則表示式:
                字元匹配:
                    . :匹配任意單個字元
                    [] :匹配指定範圍內的任意單個字元,例項:[deng] [0-9]
                    [^] :匹配指定範圍外的任意單個字元
                    [:alnum:] :字母和數字
                    [:alpha:] :代表任何英文大小寫字元,即 A-Z ,a-z
                    [:lower:] :小寫字母
                    [:upper:] :大寫字母
                    [:blank:] :空白字元
                    [:space:] :水平和垂直的空白字元
                    [:digit:] :十進位制數字
                    [:xdigit:]:十六進位制數字
                    [:punct:] :標點符號

                匹配次數:(用在要指定次數的字元後面,用於指定前面的字元要出現的次數)
                    * :匹配前面的字元任意次、包括0次
                        貪婪模式:儘可能長的匹配
                    .* :任意長度的任意字元
                    \? :匹配其前面的字元0次或1次
                    \+ :匹配前面的字元至少一次
                    \{n\} :匹配前面的字元n次
                    \{m,n\} :匹配前面的字元至少m次,至多n次
                    \{,n\} :至多匹配前面的字元n次
                    \{m,\}  :匹配前面的字元至少m次

                位置錨定:
                    ^ :行首錨定,用於模式的最左側
                    $ :行尾錨定,用於模式的最右側
                    ^pattern$ :用於匹配整行
                        ^$ :空行
                        ^[[:space:]]*$ :空白行
                    \<或\b :詞首錨定,用於單詞模式的左側
                    \>或\b :詞尾錨定,用於單詞模式的右側
                    \<pattern\> :匹配整個單詞

                分組:
                    \(\) :將一個或多個字元捆綁在一起,當做一個整體處理,如:\(root\)\+
                    分組括號中的模式匹配到的內容會被正則表示式引擎記錄於內部的變數中,這些變數的命名方式為:\1 ,\2 ,\3 ...
                    \1 :表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字元
                    例項:
                        \(string1\+\(string2\)*\)
                        \1:string1\+\(sting2\)*
                        \2: string2
                    向後引用:引用前面的分組括號中的模式所匹配字元,而非模式本身

                    或者:\|
                        例:
                            a\|b : a或b
                            C\|cat : C或cat
                            \(C\|c\)at : Cat或cat 

            vim文字編輯器:
                三種主要模式:
                    命令(Normal)模式、插入或者編輯模式、擴充套件模式
                vim [option]...file...
                選項:
                    +# :開啟檔案後,讓游標處於第#行的行首,+預設行尾
                    +/pattern :讓游標處於第一個被pattern匹配到的行的行首
                    -b file :二進位制方式開啟檔案
                    -d file1 file2... :比較多個檔案
                    -m file :只讀開啟檔案
                轉跳:
                    ^ :跳轉到非空行首
                    0 :轉跳至行首
                    $ :跳至行尾
                查詢並替換:
                    格式:
                        s/要查詢的內容/替換為的內容/修飾符
                        例:
                            [email protected]/[email protected]/[email protected]
                            s#/boot#/#i

                dd :刪除一行
                yy :複製一行
                p  :貼上
                x  :刪除一個字元(可以用p貼上前一個刪除的字元)
                0  :行首
                $  :行尾