1. 程式人生 > >Linux命令(八)過濾文字 grep

Linux命令(八)過濾文字 grep

grep 命令介紹

grep是一個強大的文字搜尋工具命令,用於查詢檔案中符合指定格式的字串,支援正則表示式。如不指定任何檔名稱,或是檔名為 -,則gerp命令從標準輸入裝置中讀取資料。

grep 家族包括grep egrepfgrep。 egrep 和 fgrep 命令只跟 grep 有很小的不同。 egrep 是 grep 的擴充套件 , fgrep 就是 fixed grep 或 fast grep,該命令使用任何正則表示式中的元字元表示其自身的字面意義,不在特殊。其中 egrep 就等同於 " grep -E" ,fgrep 等同於"grep -F"。(有點暈。。) Linux中的 grep 功能強大,支援很多引數,可以方便地用來進行文字處理工作。

grep 命令常用引數說明

-a  不要忽略二進位制資料
-A  除了顯示符合條件的那一行之外,並顯示該列之後的內容

-b  在顯示符合範本樣式的那一列之前,標示出該列第一個字元的位編號
-B  除了顯示符合條件的那一行之外,並顯示該列之前的內容

-c  計算符合結果的行數
-C  除了顯示符合條件的那一行之外,並顯示該列之前後的內容

-e  按指定的字串查詢
-E  按指定的字串指定的正則查詢

-f  指定範本檔案,其內容含有一個或多範本樣式    
-F  將範本樣式視為固定的字串列表

-G  將範本樣式視為普通的表示法來用

-h  在顯示符合範本樣式的那一列之前,不標示該列所屬的檔名稱
-H  在顯示符合範本樣式的那一列之前,標示該列所屬的檔名稱

-i  忽略字元大小寫

-l  列出檔案內容符合指定的範本樣式的檔名稱
-L  列出檔案內容不符合指定的範本央視的檔名稱

-n  在顯示符合範本樣式的那一列之前,標示出該列的列數編號

-q  不顯示任何資訊

-r  在指定路徑中遞迴查詢

-s  不顯示錯誤資訊

-v  反向查詢
-V  顯示版本資訊

-w  匹配整個單詞

-x  只顯示全列符合的列
--help  線上幫助

grep 單獨使用時至少有兩個引數,如少於兩個引數,grep 會一直等待,直到該程式被中斷。如果遇到這樣的情況,可以使用 Ctrl + c 終止。 預設情況下只搜尋當前目錄,如果遞迴查詢子目錄,可使用-r選項。

grep命令使用方法

在指定的檔案中查詢字串:

grep root  /etc/passwd    在 /etc/passwd  中查詢 root 字串

結合管道一起使用:

cat /etc/passwd   | grep root

grep mysql  my.cnf | grep datadir

查詢符合條件的內容所在的行號:

grep -n root /etc/passed

在 nginx.conf 中查詢包含 listen 的行號並打印出來:

grep listen  nginx.conf

查詢指定字串:

grep uuid  test.txt    區分大小寫
grep UUID  test.txt    區分大小寫

grep -i uuid test.txt  不區分大小寫

列出匹配字串的檔名:

grep -l uuid test.txt

列出不匹配字串的檔名:

grep -L uuid test.txt

匹配整個單詞:

gerp -w UU    test.txt
grep -w UUID   test.txt

除了顯示匹配的行,分別顯示該行上下文的 n 行:

grep -C1 UUID test.txt  此處 n = 1 ,跟在 -C 引數後面

按正則表示式查詢指定字串:

grep -n  -E  "^[a-z]+"   test.txt
grep -n  -E  "^[^a-z]+"  test.txt

grep  -E   "datadir | socket"  my.cnf

遞迴查詢:

grep -r var . | head -3

在當前的目錄下查詢檔案中的字串hello:

grep  -rn   “hello”    

grep 正則引數說明

^   指定匹配字串的行首
$   指定匹配字串的結尾
*   表示0個以上的字元   
+   表示1個以上的字元
\   去掉指定字元的特殊含義

^   指定行的開始
$   指定行的結束
.   匹配一個非換行的字元
*   匹配零個或多個先前字元

[]  匹配一個指定範圍內的字元
[^] 匹配一個不在指定範圍內的字元

\(..\)  標記匹配字元
<   指定單詞的開始
>   指定單詞的結束

x{m}    重複字元 x,m 次
x{m},   重複字元 x, 至少 m 次
x{m,n}  重複字元x, 至少 m 次,不多於 n 次

w   匹配文字和數字字元,也就是 [A-Za-z0-9]
b   單詞鎖定符

+   匹配一個或多個先前的字元
?   匹配零個或多個先前的字元

a|b|c   匹配 a 或 b 或 c

()  分組符號    

[:alnum:]   文字數字字元

[:alpha:]   文字字元

[:digit:]   數字字元

[:graph:]   非空格、控制字元

[:lower:]   小寫字元

[:cntrl:]   控制字元

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

[:punct:]   標點符號

[:space:]   所有空白字元(新行,空格,製表符)

[:upper:]   大寫字元

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