shell指令碼學習:快速理解Regex之grep篇

來源:互聯網
上載者:User

      shell指令碼是Linux的核心之一,而Regex是shell指令碼的核心之一,理解Regex可以快速匹配需要尋找的內容,對以後的shell指令碼編程打下一個堅實的基礎。

 

接觸Regex一般從grep命令開始,例如:

    grep "^#[:space:]*" /etc/inittab

這個命令中“^#[:space:]*”就是Regex的內容,它的意思是“以#開頭後跟任意個空格”,結合grep命令,就是顯示/etc/inittab檔案裡“以#開頭後跟任意個空格”的內容。

     grep命令的作用是尋找匹配的內容並列印出來

     grep [option]  Regex 要查抄的檔案

               -i   不區分大小寫

               -color    以高亮顯示匹配的常值內容

               -E  使用擴充的元字元

               -v   取反

那麼Regex分有哪些?

—————————————————————————————————————————————————————

在shell裡,Regex分為,標準元字元、擴充元字元

標準元字元: ^  $  .  *  []  [x-y]  [^]  \  \<  \>  \(...)\   x\{m\n}

擴充元字元: ^  $  .  *  []  [^]   +  ?   a|b   ()           

相關資料:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

#可在上面的連結裡查到各自的意思

      另外一個重要的知識:posix方括弧字元集        

       [:alnum:]            [:lower:]          [:xdigit:]

       [:alpha:]             [:print:]            [:blank:]

       [:blank:]             [:punct:]

       [:cntrl:]               [:space:]

       [:graph:]             [::upper:]

上面的例子grep "^#[:space:]*" /etc/inittab 裡[:space:]代表空白字元,posix字元集和Regex配合使用可以產生很強大的功能,許多時候我們都可以藉助它來實現自己的目的。

例如:顯示/boot/grub/grub.conf檔案中以一個或多個空白字元開頭的行

grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf

#這個命令裡注意 ^和[]的使用,通常^[]用來匹配開頭是某個字元,^[[:space:]]因為要求匹配的是開頭是空白字元,所以用[[:space:]]而不是[:space:],如果錯誤的寫成^[:space:]那麼就錨定[]裡的內容,現在知道[]的作用了吧:錨定某個字元,多個代表多個可能

 

 

下面幾個難度稍高一點的練習來學習理解Regex

1.顯示/etc/inittab檔案中以一個數字開頭並以一個與開頭數字相同的數字結尾的行;
2.ifconfig命令可以顯示當前主機的IP地址相關的資訊等,如果使用grep等文本處理命令取出原生各IP地址,要求不包127.0.0.1;
3.顯示/etc/sysconfig/network-scripts/ifcfg-eth0檔案中的包含了類似IP地址點分十進位數字格式的行;

 

 

##答案: 

1.  grep "^\([0-9]\).*\1$" /etc/inittab

2.  ifcofig | grep "inet addr" | grep -v '127.0.0.1' | cut -d: -f2 | cut -d "" f1

3.  grep -E "([0-9]{1,3}\.){3}\.[0-9]{1,3}" /etc/sysconfig/network-scripts/ifcfg-eth0

       grep "[0-9]\{1,3\}\.\"{3\}\.[0-9]\{1,3\} /etc/sysconfig/network-scripts/ifcfg-eth0

  

##解析

1. ^[0-9]錨定開頭的數字 使用\(...\)   \1   將^[0-9]傳遞給\1 $用來錨定結尾

2.  首先grep提出去含有inet addr的內容,-v取出‘127.0.0.1’使用cut命令 -d 來截取第一個欄位

3.  使用-E解法 ([0-9])\{1,3}    [0-9]的數字至少出現1次,至多出現3次   \.  轉義 . 符號 {3} 顯示三次前面()的內容\.[0-9]{1,3}匹配後面的3位元字                                    

       grep解法可以自己琢磨下

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.