天天一個linux命令(51)--grep命令

  linux系統中grep 命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。grep 全稱是 global regular expression print,表示全局正則表達式版本,它的使用權限是全部用戶。linux

  grep 的工做方式是這樣的,它在一個或多個文件中搜索字符串模板,若是模板包括空格,則必須被引用,模板後的全部字符串被看做文件名。搜索的結果被送到標準輸出,不影響源文件內容。git

  grep 可用於 shell 腳本,由於 grep 經過返回一個狀態值來講明搜索的狀態,若是模板搜索成功,則返回0,若是搜索不成功,則返回1,若是搜索的文件不存在,則返回2。咱們利用這些返回值 就能夠進行一些自動化的文本處理工做。正則表達式

  1.命令格式:shell

    grep [option] pattern fileexpress

  2.命令功能:svn

    用於過濾/搜索的特定字符。可以使用正則表達式能多命令配合使用,使用上十分靈活。工具

  3.命令參數:ui

    -a  --text  #不要忽略二進制的數據。編碼

    -A  --after-context=<顯示行數>  #除了顯示符合範本樣式的那一列以外,並顯示該行以後的內容。spa

    -b  --byte-offset  #在現實符合樣式的那一行以前,標識出該行第一個字符的編號。

    -B顯示行數  --before-context=<顯示行數>  #除了顯示符合樣式的那一行以外,並顯示該行以前的內容。

    -c  --count  #計算符合樣式的列數。

    -C<顯示行數>  --context=<顯示行數>或-<顯示行數>  #除了顯示符合樣式的那一行以外,並顯示該行先後的內容。

    -d  --directories  #當指定要查找的是目錄而非文件時,必須使用這項參數,不然grep 指令將回報信息並中止動做。

    -e  --regexp=<範本樣式>  #指定字符串做爲查找文件內容的樣式。

    -E  --extended-regexp  #將樣式爲延伸的普通表示法來使用。

    -f  --file=<規則文件>  #指定規則文件,其內容含有一個或多個規則樣式,讓 grep 查找符合規則條件的文件內容,格式爲每行一個規則樣式。

    -F  --fixed-regexp  #將樣式視爲固定字符串的列表。

    -G  --basic-regexp  #將樣式視爲普通的表達法來使用。

    -h  --no-filename  #在顯示符合樣式的那一行以前,不標示該行所屬的文件名稱。

    -H  --with-filename  #在顯示符合樣式的那一行以前,表示該行所屬的文件名稱。

    -i  --ignore-case  #忽略字符大小寫的差異。

    -l  --file-with-matches  #列出文件內容符合指定的樣式的文件名稱。

    -L  --files-without-match  #列出文件內容不符合指定的樣式的文件名稱。

    -n  --line-number  #在顯示符合樣式的那一行以前,標示出該行的列數編號。

    -q  --quiet或--silent  #不顯示任何信息。

    -r  --recursive  #此參數的效果和指定的 「-d recurse」 參數相同。

    -s  --no-messages  #不顯示錯誤信息。

    -v  --revert-match  #顯示不包含匹配文本的全部行。

    -V  --version

    -w  --word-regexp    #只顯示全字符合的列。

    -x  --line-regexp  #只顯示全列符合的列。

    -y  #此參數的效果和指定 「-i」  參數相同。

  4.規則表達式:

    grep 的規則表達式:

    ^  #錨定行的開始,如: ‘ ^grep ’ 匹配全部以 grep 開頭的行。

    $  #錨定行的結束,如: ‘grep $ ’ 匹配全部以 grep 結尾的行。

    .  #匹配一個非換行符的字符,如  ‘gr.p’ 匹配gr 後接一個任意字符,而後是 P.

    *  #匹配零個或多個先前字符,如  ‘*grep ’ 匹配全部一個或多個空格後緊跟 grep 的行。

    .*  #一塊兒用表明任意字符。

    []  #匹配一個指定範圍內的字符,如 ‘[Gg]rep’匹配 Grep 和grep 。

    [^]  #匹配一個不在指定範圍內的字符,如 ‘[^A-FH-Z]rep’ 匹配不包含A-R和 T-Z的一個字母開頭,緊跟 rep 的行。

    \(..\)  #標記匹配字符,如 ‘\(love\)’,love 被標記爲1。

    \<    #錨定單詞的開始,如:‘\<grep’ 匹配包含以 grep開頭的單詞的行。

    \>    #錨定單詞的結束,如‘grep\>’匹配包含以grep 結尾的單詞的行。

    x\{m\}  #重複字符x,m 次,如 ‘0\{5\}’匹配包含5個0的行。

    x\{m,\}  #重複字符x,至少m次,如 ‘o\{5,\}’ 匹配至少有5個o 的行。

    x\{m,n\}  #重複字符x,至少m次,很少於n次,如 ‘o\{5,10\}’匹配5--10個o的行。

    \w    #匹配文字和數字字符,也就是 [A-Za-z0-9], 如‘G\w*p’ 匹配以G後跟零個或多個文字或數字字符,而後是P。

    \W    #\w的反置形式,匹配一個或多個非單詞字符,如點號句號等。

    \b    #單詞鎖定符,如 ‘\bgrep\b’ 只匹配 grep。

    POSIX字符:

    爲了在不一樣國家的字符編碼中保持一至,POSIX(the portable operating system interface )增長了特殊的字符類,如[:alnum:]是[A-Za-z0-9]的另外一個寫法。

    要把它們放到[]號內才能成爲正則表達式,如[A-Za-z0-9] 或[[:alnum:]]。在Linux下的grep 除fgrep 外,都支持 POSIX的字符類。

    [:alnum:]  #文字數字字符

    [:alpha:]   #文字字符

    [:digit:]    #數字字符

    [:graph:]    #非空字符(非空格、控制字符)

    [:lower:]    #小寫字符

    [:cntrl:]    #控制字符

    [:print:]    #非空字符(包括空格)

    [:punct:]    #標點符號

    [:space:]    #全部空白字符(新行,空格,製表符)

    [:upper:]    #大寫字符

    [:xdigit:]    #十六進制數字(0-9,a-f,A-F)

  5.使用實例:

  實例1:查找指定進程

  命令:ps  -ef | grep svn

  實例2:查找指定進程個數

  命令:ps -ef | grep  svn -c

      ps   -ef  |  grep  -c  svn

  實例3:從文件中讀取關鍵詞進行搜索

  命令:cat test.txt  | grep  -f  test2.txt

    輸出  test.txt 文件中含有從 test2.txt 文件中讀取出的關鍵詞的內容行,-f 參數

  實例3:從文件讀取關鍵詞進行搜索且顯示行號

  命令:cat  test.txt  |  grep -nf  test2.txt  

     -n 參數顯示行號,

  實例4:從文件中查找關鍵詞

  命令:grep 'linux'  test.txt

  實例5:從多個文件中查找關鍵詞

  命令:grep ‘Linux ’   test.txt  test2.txt

    多文件時,輸出查詢到的信息內容行時,會把文件的命名在行最前面輸出而且加上「:」做爲標識符

      grep 'linux'  *.txt     在全部  txt 文件中查找 Linux 字符。

  實例6:grep 不顯示自己進程

  命令:  ps  aux |  grep \[s]sh  

    ----warning:bad syntax. 竟然是語法錯誤的警告。

  實例7:找出以 u  開頭的行內容

  命令:  cat test.txt  |  grep  ^u

  實例8: 輸出非 u  開頭的行內容

  命令: cat  test.txt | grep ^[^u]

  實例9:輸出以 hat 結尾的行內容

  命令: cat  test.txt  | grep  hat$

  實例10:輸出 IP 地址  ifconfig  eth0 |  grep "[0-9]\{1,3\}\." ···後面省略,這個能夠匹配出一個  192.

      [0-9] 匹配一個0-9內的數字,  x\{1,3\} 重複字符x,至少1次,很少於3次。  \.   \是轉譯符,表示後面的 「.」 就表示  「.」  。

  實例11:顯示包含 ed 或者  at 字符的內容行

  命令: cat test.txt |  grep -E   "ed | at "

  實例12:顯示當前目錄下面以 .txt  結尾的文件中的全部包含每一個字符串至少有7個連續小寫字符的字符串的行。

  命令:grep '[a-z]\{7\}'*.txt

相關文章
相關標籤/搜索