1. 程式人生 > >正則表達式的用法

正則表達式的用法

linux的文本過濾工具grep

grep

grep的主要作用就是文本過濾,在Linux中還是很好用的,自我感覺學這個是很有意思的,也很有用,剛學的時候可能會感覺它的用法很簡單,但是再往後學習,你會喜歡上這個命令的,因為它確實很方便,很強大,好好學習,細細品味,相信你會對grep這個強大的命令有更深刻的理解。下面介紹一下它的基本語法

  Global search REgular expression and Print out the line  (全局搜索正則表達式和打印行)
  作用:文本搜索工具,根據用戶指定的“模式”對目標文件逐行進行匹配檢查,打印匹配到的行  
  模式:由正則表達式字符及文本字符所編寫的過濾條件  
  語法:grep [OPTIONS] PATTERN [FILE...]    
     eg:grep root /etc/passwd      grep `whoami` /etc/passwd      grep "$USER" /etc/passwd   
  選項:       
       -i:忽略字符大小寫     
       -o:僅輸出匹配到的字符串    
       -v:顯示不被匹配到的行   
       -n:顯示匹配到的行號      
       -c:顯示匹配到的行數      
       -w:顯示匹配到的整個單詞      
       -e:現多個選項之間的邏輯或or關系     
       -AN #:顯示匹配到的字符串#和之後的N行      
       -BN #:顯示匹配到的字符串#和之前的N行      
       -CN #:顯示匹配到的字符串#和它前後各N行

看了上面的介紹可能也不知道grep有哪些特別的地方,但是學完正則表達式,你會感覺grep和正則表達式在一起用真的好方便,功能很強大。雖然正則表達式剛開始學起來會有點暈,但是課下做點題,多動腦思考,相信你會有很大的收獲的。下面的只是要記住,而且會用哦

正則表達式

1、 程序支持:grep,sed,awk,vim,less,nginx等
2、分兩類:   基礎正則表達式:BRE   擴展正則表達式:ERE
3、元字符(有特殊含義的字符)
    分類:  字符匹配、匹配次數、位置錨定、分組
4、使用man 7 regex可查看正則表達式的內容       
 《1》 字符匹配的正則表達式元字符:   
       .   匹配單個任意字符  
      []  匹配指定範圍內的任意單個字符 
     [^] 匹配指定範圍外的任意單個字符  
 [:alnum:] 字符和數字  
 [:alpha:] 代表任何英文大小寫字符  
 [:lower:] 小寫字母 
 [:upper:] 大寫字母 
 [:blank:] 空白字符(空格和制表符)  
 [:space:] 水平和垂直的空白字符(比[:blank:]的範圍廣) 
 [:cntrl:] 不可打印的控制字符(退格、刪除) 
 [:digit:] 十進制數字 
5.正則表達式 
 《1》:匹配次數:用在要指定的字符後面,用於指定前面的字符要出現的次數。 
     貪婪模式:盡可能長地匹配      
    *  匹配前面的字符任意次,包括0次   
    .*   匹配任意長度的任意字符   
    \?  匹配前面的字符0次或一次,需要加引號引起來。 
   \+  匹配前面的字符至少一次      
    \{n\} 匹配前面的字符n次          
  \{m,n\} 匹配前面的字符最少m次,最多n次   
   \{n,\} 匹配前面的字符最多n次        
    \{,n} 匹配前面的字符最少n次  
 《2》:位置錨定        
          ^   行首錨定,用於模式最左側     
          $   行尾錨定,用於模式最右側      
       ^PATTERN$  用戶模式匹配整行     
        ^$      空行      
    [[:space:]]*$ 空白行,有Tab空格的行     
         \<     用於詞首錨定,用於單詞模式的左側    
         \>     用於詞尾錨定,用於單詞模式的右側      
      \<PATTERN\> 用於匹配整個單詞 
        
 《3》:分組
      \(\)將一個或多個字符捆綁在一起,當做一個整體來處理  
          例如:\(root\)\+    
      分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名方式為: \1, \2, \3, ...   
       \1 表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符   
       示例: \(string1\+\(string2\)*\)       
             \1 :string1\+\(string2\)*      \2 :string2

上面一大堆零碎的看起來確實有些頭疼,但是不要刻意去死記硬背,做做下面的小練習,使用這些知識,相信在做題的時候你會掌握不少

練習:

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

技術分享技術分享

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

技術分享


3、顯示用戶rpc默認的shell程序

技術分享


4、找出/etc/passwd中的兩位或三位數

技術分享


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

技術分享


6、找出“netstat -tan”命令的結果中以‘LISTEN’後跟任意多個空白字符結尾的行

技術分享


7、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找出/etc/passwd用戶名同shell名的行

技術分享


8、顯示CentOS7上所有系統用戶的用戶名和UID

首先要知道系統用戶ID是 0-999 的哦

技術分享


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

一般都不會想到要過濾一下/dev/sda 這樣的真正是磁盤分區的,所以下面的寫法還是比較符合題意的

技術分享


下面這個用到了正則表達式,而且思路也挺好,值得借鑒

技術分享


做完這些小練習是不是感覺自己進步很大,所以學習Linux是一件很有意思的事,只要你認真、用心,相信你會收獲很多的!


本文出自 “12922061” 博客,請務必保留此出處http://12932061.blog.51cto.com/12922061/1932091

正則表達式的用法