grep 詳解

一、grep是什麼。

    grep:Global search regular expression and print out the line.

    grep是一種文本搜索處理工具,根據用戶指定的文本模式或搜索條件對目標文件進行逐行搜索,並顯示能匹配到的行。

    語法格式:grep [options]... 'PATTERN' FILE...

              '':弱引用,

              "":強引用,如PATTERN中有變量需用雙引號

    正則表達式:是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能

    基本正則表達式:grep   

    擴展正則表達式:egrep,grep -E

    不支持使用正則表達式:fgrep,即用戶搜索條件或文本模式表示其字面意義

    1、字符匹配

.:匹配任意單個字符
*:任意長度,它前面的字符可以出現任意次
.*:任意長度的任意字符
a|b:多條件匹配,a或者b  #擴展正則表達式可用
[]:匹配指定範圍內的任意單個字符
    [0-9],[[:digit:]]    #表示任意數字
    [a-z],[[:lower:]]    #表示任意小寫字母
    [A-Z],[[:upper:]]    #表示任意大寫字母
    [[:space:]]          #表示空格
    [[:punct:]]          #表示特殊符號
    [[:alpha:]]          #表示任意字母
    [[:alnum:]]          #表示任意字母和數字
    [[:blank:]]          #匹配一個空格或製表符(TAB)
    [^]                  #條件取反

    2、次數匹配元字符

#"\"符號爲轉義符,擴展正則表達式不需要轉義
\?:0次或1次,它前面的字符是可有可無的    
\{m\}:精確匹配m次,它前面的字符要出現m次    #轉義前{m}
\{m,n\}:至少m次,至多n次            #轉義前{m,n}
\{m,\}:至少m次                      #轉義前{m,}
+:至少1次
\{0,n\}:至多n次                     #轉義前{0,n}

    3、位置錨定

^:行首錨定,寫在模式最左側
$:行尾錨定,寫在模式最右側
^$:空白行
\<:詞首,寫在字符左側
\>:詞尾,寫在字符右側
\<char\>:錨定字符串
\b:字符串錨定,不區分詞首詞尾

    4、分組和引用

\(\):分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之後可被引用。擴展正則表達式不需要轉義,直接使用()即可
        例如:\(ab\).*\1,即引用前一個括號匹配到的內容
            格式:\(char\).*\#,\#表示引用前面第#個括號匹配的內容

    5、命令選項

-v:反向選取
-o:僅顯示匹配的字串,而非字串所在的行
-i:igonore-case,忽略字符大小寫
-E:支持使用擴展正則表達式
--color:匹配字串顯示顏色,顏色可指定
-n:顯示匹配行的位置,在第幾行
-A #:顯示上下文,#表示數字,顯示下面#行
-B #:顯示上面#行
-C #:顯示上下#行

    6、例子

1)找出/etc/passwd文件中的一位數或兩位數;
     # grep -E '\<[0-9]{1,2}\>' /etc/passwd   擴展正則
     # grep "\<[0-9]\{1,2\}\>" /etc/passwd    基本正則
2)顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
     # grep '^[[:space:]]{1,}' /boot/grub/grub.conf
     # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
3)找出/etc/rc.d/init.d/functions文件中某單詞後跟一組小括號“()”行;
     # grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions
4)顯示當前系統上root、fedora或user1用戶的默認shell;
     # grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章