grep與正則表達式

文本處理中比較強悍的三個工具是:grep、sed、awk。

其中grep主要作用是對于用戶給出“模式”對文本逐行進行匹配檢查,然后進行打印。

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

格式:grep [選項] [正則表達式字符]  文件

 常用的選項:

    -v:反向查找,顯示沒有被匹配的的行

    -i:不區分大小寫

    -o:只顯示查找的內容

    -n:顯示匹配的行號

    -c:統計匹配的行數

    -q:不輸出任何內容

    -A #:顯示出查找到的內容的后#行

    -B #:顯示出查找到的內容的前#行

    -C #:顯示出查找到的內容的前后各#行

    -e:實現多個選項之間或的關系 例如:grep -e 'root' -e 'bash' file

    -w:整行匹配整個單詞

    -E:使用此選項開啟egrep


各個選項示例:

    -v選項:

示例:不顯示f1文件中帶有數字的行

[root@myhost testdir]# cat f1

ni hao 

aaaaaa123 

345 bbbbb

[root@myhost testdir]# grep -v [[:digit:]] f1

ni hao 


    -i選項:

示例:查找出文件中含有大小寫a的行

[root@myhost testdir]# cat f1

ni hao 

AAA123 

345 bbbbb

[root@myhost testdir]# grep -i a f1 

ni hao 

AAA123


    -n選項:

示例:查找出含有root的字符串并顯示行號 

[root@myhost testdir]# grep -n root /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

    -o選項:

示例:在/etc/passwd文件中查找出root字符串

[root@myhost testdir]# grep -o root /etc/passwd

root

root

root

root


    -c選項:

示例:統計出/etc/passwd文件中以/bash/nologin結尾的一共有多少行

[root@myhost testdir]# grep -c "/sbin/nologin" /etc/passwd 

29


     -A選項:

示例:過濾出lisi用戶所在行及后一行

[root@myhost testdir]# grep lisi -A 1 /etc/passwd

lisi:x:502:502::/home/lisi:/bin/bash

wangwu:x:503:503::/home/wangwu:/bin/bash


    -B選項:

示例:過濾出mysql系統用戶行及前兩行

[root@myhost testdir]# grep mysql -B 2 /etc/passwd

saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash


    -C選項:

示例:過濾出mail系統用戶所在行及前后各一行

[root@myhost testdir]# grep mail -C 1 /etc/passwd

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

    

    -e選項:

示例:過濾出f1文件中包含數字或小寫字母的行

[root@myhost testdir]# cat f1

ni hao 

AAA123 

345 bbbbb

[root@myhost testdir]# grep -e"[0-9]" -e "[a-z]" f1

ni hao 

345 bbbbb


     -w選項:

示例:查找出f1文件中的含有which單詞的行

[root@myhost testdir]# cat f1

which

whichabc

abcwhich

[root@myhost testdir]# grep -w which f1

which

[root@myhost testdir]# grep which f1

which

whichabc

abcwhich

 

    -E選項


正則表達式篇:

 正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為元字符)。模式描述在搜索文本時要匹配的一個或多個字符串其中有 些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

 正則表達式分為兩類:

             基本正則表達式:BRE

             擴展正則表達式:ERE

  元字符分類::字符匹配、匹配次數、位置錨定、分組 


字符匹配:

     . : 匹配任意一個字符

     [] :匹配指定范圍內的任意一個字符

     [^] :匹配除指定范圍外的任意一個字符

字符集:

     [:digit:] : 代表所有數字

     [:lower:] : 代表所有小寫字母

     [:upper:] : 代表所有大寫字母

     [:alpha:] : 代表所有大小寫字母

     [:alunm:] : 代表所有字母和數字

     [:space:] : 代表空格和Tab

     [:punct:] : 代表所有標點符號

匹配次數:用在要指定的字符后,用于指定前面字符要出現的次數

   

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

     .*:匹配任意長度的任意字符

     \?:匹配前面的字符0次或一次

     \+:匹配前面的字符至少一次

     \{m\}:匹配前面字符m次

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

     \{,n\}:匹配前面字符至多n次

     \{m,\}:匹配前面字符至少m次

     

位置錨定:定位字符出現的位置

      

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

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

     ^模式$ :用于模式匹配整行

     ^$:表示空行

     \< 或 \b 詞首錨定,用于錨定詞的左側

     \> 或 \b 詞尾錨定,用于錨定詞的右側

        \<模式\> 用于錨定整個單詞

分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+

   分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…

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

        實例: \(string1\+\(string2\)*\) 

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

              \2: string2 

    后向引用:引用前面的分組括號中的模式所匹配字符(而 非模式本身)


      



    






   


      



    


原創文章,作者:ZJM,如若轉載,請注明出處:http://www.www58058.com/30189

(0)
ZJMZJM
上一篇 2016-08-08 16:15
下一篇 2016-08-08 16:15

相關推薦

  • 開班第一天

    我的一篇小日記

    Linux干貨 2018-03-26
  •  編譯安裝步驟     大致過程:(源代碼–預處理–編譯–匯編–鏈接–執行)   第一步 下載安裝開發工具“Development toos” 第二步 下載解壓源代碼包 仔細閱讀“Install和 Read me” 第三步 使用./conf…

    Linux干貨 2017-04-24
  • pam_mysql認證ftp虛擬用戶賬號

    pam_mysql認證ftp虛擬用戶賬號: 虛擬用戶:        用戶賬號存儲于何處?        文件、MySQL、Redis、…       &nb…

    2017-06-13
  • 修改Linux命令終端提示符

    作業1. 設置自己的終端提示符,要求字符終端登錄時:     a> 需要帶顏色     b> 需要顯示當前執行到了第幾條命令     c> 顯示當前登錄終端,主機名和當前時間     這可以通…

    Linux干貨 2016-10-17
  • linux發展史

    通過本篇文章,讀者可以了解Linux的基本概念、歷史、發展情況; 首先,我們通過簡單的介紹Linux,了解什么是linux以及它的發展背景; 前言:操作系統介紹 內核負責控制硬件資源分配,而如果只有內核,則只能讓計算機硬件運行,而不能有任何功能,因此需要系統調用提供給開發者使用,從而開發應用程序; 內核能夠控制硬件,比如:讓CPU可以運算、讓硬盤可以讀寫數據…

    Linux干貨 2016-10-14
  • IP地址之IPv4

    一、概述   IP地址有IPv4和IPv6兩個版本,目前我們通常所說的IP地址是指IPv4。   IP地址由32位的二進制數組合而成,為了方便人類記憶,將二進制轉換成4個十進制的數值。   在這32位數據中分為網絡號與主機號兩個部分。 二、IP的分級   IP網段分為五個等級,其定義如下:   A類:規定前面…

    Linux干貨 2016-02-14
欧美性久久久久