#7 shell指令碼編程之Regex

來源:互聯網
上載者:User

標籤:shell指令碼編程之Regex

    多命令執行方法:

    指令碼組成;

      1.shengbang

      2.#

      3.空白行——沒有任何內容的行、只包含空白字元或定位字元(TAB)

      4.邏輯判斷


    shell指令碼編程:

      1.加執行許可權,通過路徑來呼叫指令碼;

      2.利用解譯器直接執行;


  本文處理工具:

    vim、vi、nano 


  文本處理三劍客:

    grep系:

    grep、egrep、fgrep,文本搜尋工具,基礎“pattern”對於給定的文本進行模糊搜尋,grep系預設工作於貪婪模式下;

    

    sed:stream editor,流資料器,行編輯器,文本編輯工具;


    awk:gawk,——gun awk,文字格式設定化工具,文本報告產生器,文本處理的程式設計語言;


    cut、sort


grep系:

  grep

  egrep

  fgrep


  grep:global search regular expression and print out the line。

          利用Regex進行全域搜尋並將匹配的行顯示出來; 

       grep [OPTIONS] PATTERN [FILE...]

         PATTERN:過濾條件,是由Regex元字元以及沒有特殊含義的文本字元組成;

           Regex的元字元:

             會被Regex引擎解釋為特殊含義;

             pcre(最完整的Regex引擎)——perl語言的Regex引擎;


             基本的Regex:bre

             擴充的Regex:ere


        grep:預設僅支援基本Regex;

       egrep:預設僅支援擴充Regex;

       fgrep:預設不開啟Regex引擎;


           文本字元:

             只具備字元便面含義的那些字元;

         常用選項:

           -i, --ignore-case:忽略文本字元的大小寫;

           -v, --invert-match:反相匹配;最終顯示的結果是pattern不能成功匹配的行;

           -c, --count:計數,統計匹配pattern的所有的行數;

           -o, --only-matching:關閉貪婪模式,僅顯示pattern能夠匹配的內容;

           -q, --quiet, --silent:安靜模式,不輸出任何匹配結果;

           --color[=WHEN], --colour[=WHEN]:將匹配pattern的內容以特殊顏色高亮顯示;

             --color=auto

           -E, --extended-regexp:擴充的Regex,grep -E相當於egrep

           -F, --fixed-strings, --fixed-regexp:grep -F 相當於fgrep

           -G, --basic-regexp:基本的Regex,egrep -G 相當於grep

           -P, --perl-regexp:使用pcre(perl common regular expression)引擎;

           -A NUM, --after-context=NUM:在顯示匹配pattern的行的同時顯示其後面的num行;

           -B NUM, --before-context=NUM:在顯示匹配pattern的行的同時顯示其前面的num行;

           -C NUM, -NUM, --context=NUM:在顯示匹配pattern的行的同時顯示其前後各num行;


         pattern:

           Regex元字元:

             基本的Regex元字元:

             globbing--------簡化版的Regex:[] ? *


             字元匹配:

                . :匹配任意單個字元;

               [] :匹配指定範圍內的任意單個字元;

              [^] :匹配指定範圍意外的任意單個字元;

              下列所有的字元集都可以放置於[]之中用於匹配單個字元;

                     [:lower:]:表示所有小寫字字母;

                       [[:lower:]]:通配任意單個小寫字母;

                     [:upper:]:表示所有的大寫字母;

                       [[:upper:]]:通配任意單個大寫字母;

                     [:alpha:]:表示所有字母字元;

                     [:digit:]:表示所有的十進位數字;    10

                     [:alnum:]:表示所有的大小寫字母以及十進位數字;

                     [:space:]:表示空白字元;

                     [:punct:]:表示所有的標點符號;

                     [:blank:]:表示空白字元;

                     [:xdigit:]:所有的十六進位數字;

                     a-z:所有的小寫字母;

                     A-Z:所有的大寫字母;

                     0-9:所有的十進位數字;


             次數匹配:該類字元之前的那個字元可以出現的字數;

               *:其前面的字元可以出現任意次(0次,1次或多次);

              \?:其前面的字元可有可無(0次或1次);   

              \+:其前面的字元至少出現一次(1次或多次);

           \{m\}:其前面的字元必須出現m次;

         \{m,n\}:其前面的字元至少出現m次,至多出現n次;(m<n)

          \{,n\}:其前面的字元至少出現0次,至多出現n次;       

          \{m,\}:其前面的字元至少出現m次,多多益善;


           在Regex中,表示任意長度任一字元的方式:.*


             位置錨定字元:

               行錨定:

                 行首錨定:^

                 行尾錨定:$

               字錨定:

                 字首錨定:\<或\b

                 字尾錨定:\>或\b    

                 \b:舊版本中的錨定方法,建議不使用;


               對於Regex引擎來說,字是由非特殊字元組成的練習字串;


             分組與引用字元:

                 \(pattern\):將此pattern所匹配到的所有字元當作一個不可分割的整體來處理;


                 在Regex引擎值周,有一系列的內建變數,這些變數會儲存所有分組內的字元資訊,用於後向引用;這些變數依次是:\1,\2,\3,...


                 pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)


                 \1:pattern2

                 \2:pattern4                                     

                 \3:pattern5


                 \1:第一組小括弧中的pattern匹配到的字元;

                 \2:第二組小括弧中的pattern匹配到的字元;

                 ...


                 請找出在/etc/passwd中使用者的UID和GID相同的使用者賬戶;

                 grep ‘\(\<[[:digit:]]\+\>\).*\1‘ /etc/passwd:設定和查看使用者的密碼資訊;


             或:

                  \|


                  注意:\|將其左右兩邊的字串當作整體對待;


                  A\|american:A或american


                 請找出ifconfig命令的執行結果中數值在100-255之間的整數;

                  

                 第一位: 1    2

                 第二位:0-9  0-4  5

                 第三位:0-9  0-9  0-5


                 ifconfig | grep ‘\<1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\>‘

                 請找出ifconfig命令執行結果中數值在0-255之間的整數


       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


         預設情況下,grep命令後面只允許有一個pattern;

         如果想要在一次grep搜尋過程中寫多個pattern,則需要使用-e選項:每一個-e選擇只能使用一個pattern作為參數;


         將所需要的pattern寫入到一個個檔案中,保證每行只有一個pattern:我們就可以使用-f file方式來實現多pattern匹配;


       egrep:

         egrep [OPTIONS] PATTERN [FILE...]

           擴充的Regex元字元:

             字元匹配:

               .

               []

               [^]


             次數匹配:

                *

                ?

                +

                {m}

                {m,n}

                {m,}

                {0,n} 


             位置鉚釘:    

                ^

                $

                \<,\b

                \>,\b


             分組和引用:

                ()

                \1,\2,\3,...


             或:

                |


       fgrep:pattern中所有的字元都被當作文本字元來處理;


    其他的文本處理命令;

       wc:統計一個檔案中的行數、字數及位元組數;

          wc [OPTION]... [FILE]...

          wc [OPTION]... --files0-from=F

               -c:只顯示位元組數;

               -l:只顯示行數;

               -w:只顯示字數;



       cut:remove sections from each line of files

          能夠被cut命令修剪的檔案,一般都是具有一定結構或格式的文字文件;/etc/passwd

          cut OPTION... [FILE]...

            -d, --delimiter=DELIM:指定在實施修剪操作時所依賴的分隔字元,預設是空白字元;

            -f, --fields=LIST:根據定義的分隔字元來指定欄位的編號;

               地址定界使用方法:

               #:選擇被指定的單個欄位;

               #,#:離散的多個被指定的單個欄位;

               #-#:連續的多個被指定的欄位;

            --output-delimiter=STRING:指定輸出符號;


       awk:pattern scanning and processing language

            awk -F "delimiter"‘[/pattern/]{print $1,$2,...$NF}‘ file...

            -F "delimiter":指定欄位分隔符號,預設為空白字元;

            $1,$2,...$NF:根據欄位分隔符號切割出來的文本片段都存放在相應的內部變數中;


       sort:sort lines of text files,將文字檔按行繼續排序,預設定序是按照ASCII表中的字元順序進行,

       這個排序標準可以修改;

       sort [OPTION]... [FILE]...

       sort [OPTION]... --files0-from=F

                    -r, --reverse:逆序排序

                    -R, --random-sort:隨機排序,這種隨機演算法是非常簡陋的,不適用於複雜環境;

                    -u, --unique:重複出現的行,只保留一行;(連續且完全相同的行叫重複)祛重;

                    -n, --numeric-sort:以數位數值大小進行排序;

                    -t, --field-separator=SEP:指定欄位分隔符號;

                    -k, --key=KEYDEF:指明根據哪個關鍵字段進行排序,一般和-t同時使用;

             

       uniq:report or omit repeated lines

       uniq [OPTION]... [INPUT [OUTPUT]]

                    -d, --repeated:只顯示重複出現的行,而且每一組重複行只顯示一行;

                    -u, --unique:只顯示不重複的行;

                    -c, --count:在每行以首碼的方式顯示重複行的重複次數;

 

       diff:compare files line by line

       diff [OPTION]... FILES

                    同一檔案的不同修改版本:打補丁;

                   

       patch:apply changes to files

       patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]

               [-o outfile][-p num][-r rejectfile][file]


#7 shell指令碼編程之Regex

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.