1 . 語法
grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本文件>][–help][範本樣式][文件或目錄…]
2 . 選項
-a 不要忽略二進制數據。
-A<顯示列數> 除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容。
-B 在顯示符合範本樣式的那一行之外,並顯示該行之前的內容。
-b 顯示匹配到的字符在文件中的偏移地址
-c 計算符合範本樣式的列數。
-C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。
-d<進行動作> 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作。
-e<範本樣式> 指定字符串作爲查找文件內容的範本樣式。
-E 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。
-f<範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式。
-F 將範本樣式視爲固定字符串的列表。
-G 將範本樣式視爲普通的表示法來使用。
-h 在顯示符合範本樣式的那一列之前,不標示該列所屬的文件名稱。
-H 在顯示符合範本樣式的那一列之前,標示該列的文件名稱。
-i 忽略字符大小寫的差別。
-l 列出文件內容符合指定的範本樣式的文件名稱。
-L 列出文件內容不符合指定的範本樣式的文件名稱。
-n 在顯示符合範本樣式的那一列之前,標示出該列的編號。
-q 不顯示任何信息。
-R/-r 此參數的效果和指定“-d recurse”參數相同。
-s 不顯示錯誤信息。
-v 反轉查找。
-V 顯示軟件版本信息
-w 只顯示全字符合的列。
-x 只顯示全列符合的列。
-y 此參數效果跟“-i”相同。
-o 只輸出文件中匹配到的部分。
3 . 例子
[iloong@h88 ~]$ cat testA.txt
hello word!
my name is xxx.Nice to meet you!
what can I do for you?
Thanks.
I love you>_<
[iloong@h88 ~]$ cat testB.txt
Hi,my friends,nice to meet you!
//在文件中搜索一個單詞,命令會返回一個包含“match_pattern”的文本行:
[iloong@h88 ~]$ cat testA.txt
hello word!
my name is xxx.Nice to meet you!
what can I do for you?
Thanks.
I love you>_<
[iloong@h88 ~]$ cat testB.txt
Hi,my friends,nice to meet you!
//在多個文件中查找
[iloong@h88 ~]$ grep "you" testA.txt testB.txt
testA.txt:my name is xxx.Nice to meet you!
testA.txt:what can I do for you?
testA.txt:I love you>_<
testB.txt:Hi,my friends,nice to meet you!
//-b 顯示匹配到的字符在文件中的偏移地址
[iloong@h88 ~]$ cat testB.txt
Hi
my friends
nice to meet you!
Thanks!
[iloong@h88 ~]$ grep 'you' -b testB.txt
14:nice to meet you!
//-c 計算符合範本樣式的列數
[iloong@h88 ~]$ grep -c 'you' testB.txt
1
//-h/-H 不/標示該列的文件名稱
[iloong@h88 ~]$ grep -h 'you' testB.txt
nice to meet you!
[iloong@h88 ~]$ grep -H 'you' testB.txt
testB.txt:nice to meet you!
//-i 忽略字符大小寫的差別
//未忽略
[iloong@h88 ~]$ grep 'i' testA.txt
my name is xxx.Nice to meet you!
[iloong@h88 ~]$ grep -i 'I' testA.txt
my name is xxx.Nice to meet you!
what can I do for you?
I love you>_<
//-n 標示出該列的編號
[iloong@h88 ~]$ grep -n 'you' testB.txt
3:nice to meet you!
//-w 只顯示全字符合的列
[iloong@h88 ~]$ grep 'you' testC.txt
I love you
youself
[iloong@h88 ~]$ grep -w 'you' testC.txt
I love you
//-x 只顯示全列符合的列
[iloong@h88 ~]$ grep -x 'I love you' testC.txt
I love you
[iloong@h88 ~]$ grep -x 'I love' testC.txt
[iloong@h88 ~]$
//-v 顯示軟件版本信息
[iloong@h88 ~]$ grep -V 'you' testC.txt
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
GPLv3+ 許可證: GNU 通用公共許可證第三版或更高版本
這是自由軟件: 您可自由更改並重新分發它。
在法律所允許的範圍內,不附帶任何擔保條款。
//輸出除之外的所有行 -v 選項:
來自: http://man.linuxde.net/grep
[iloong@h88 ~]$ grep -v "love" testA.txt
hello word!
my name is xxx.Nice to meet you!
what can I do for you?
Thanks.
//只輸出文件中匹配到的部分 -o 選項:
[iloong@h88 ~]$ grep -o "love" testA.txt
love
//使用正則表達式 -E 選項:
//統計文件或者文本中包含匹配字符串的行數 -c 選項:
[iloong@h88 ~]$ grep -c 'name' testA.txt
1
#輸出包含匹配字符串的行數 -n 選項:
[iloong@h88 ~]$ grep -n 'you' testA.txt
2:my name is xxx.Nice to meet you!
3:what can I do for you?
5:I love you>_<
#或
[iloong@h88 ~]$ cat testA.txt |grep 'you' -n
2:my name is xxx.Nice to meet you!
3:what can I do for you?
5:I love you>_<
#多個文件
[iloong@h88 ~]$ grep -n 'you' testA.txt testB.txt
testA.txt:2:my name is xxx.Nice to meet you!
testA.txt:3:what can I do for you?
testA.txt:5:I love you>_<
testB.txt:1:Hi,my friends,nice to meet you!
//打印出匹配文本之前或者之後的行:
[iloong@h88 ~]$ cat testC.txt
1
2
3
4
5
6
7
8
9
//顯示匹配某個結果之後的2行,使用 -A 選項:
[iloong@h88 ~]$ grep '5' -A 2 testC.txt
5
6
7
//顯示匹配某個結果之前的2行,使用 -B 選項:
[iloong@h88 ~]$ grep '5' -B 2 testC.txt
3
4
5
//顯示匹配某個結果的前三行和後三行,使用 -C 選項:
[iloong@h88 ~]$ grep '5' -C 2 testC.txt
3
4
5
6
7
注:如果匹配結果有多個,會用“–”作爲各匹配結果之間的分隔符
[iloong@h88 ~]$ grep '5' -A 2 testC.txt
5
6
7
--
5
6
7
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結尾的單詞的行。
x{m} 重複字符x,m次,如:’0{5}’匹配包含5個o的行。
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。
\b 單詞鎖定符,如: ‘\bgrep\b’只匹配grep。
關於匹配的實例:
grep -c “48” test.txt 統計所有以“48”字符開頭的行有多少
grep -i “May” test.txt 不區分大小寫查找“May”所有的行)
grep -n “48” test.txt 顯示行號;顯示匹配字符“48”的行及行號,相同於 nl test.txt |grep 48)
grep -v “48” test.txt 顯示輸出沒有字符“48”所有的行)
grep “471” test.txt 顯示輸出字符“471”所在的行)
grep “48;” test.txt 顯示輸出以字符“48”開頭,並在字符“48”後是一個tab鍵所在的行
grep “48[34]” test.txt 顯示輸出以字符“48”開頭,第三個字符是“3”或是“4”的所有的行)
grep “^[^48]” test.txt 顯示輸出行首不是字符“48”的行)
grep “[Mm]ay” test.txt 設置大小寫查找:顯示輸出第一個字符以“M”或“m”開頭,以字符“ay”結束的行)
grep “K…D” test.txt 顯示輸出第一個字符是“K”,第二、三、四是任意字符,第五個字符是“D”所在的行)
grep “[A-Z][9]D” test.txt 顯示輸出第一個字符的範圍是“A-D”,第二個字符是“9”,第三個字符的是“D”的所有的行
grep “[35]..1998” test.txt 顯示第一個字符是3或5,第二三個字符是任意,以1998結尾的所有行
grep “4{2,}” test.txt 模式出現機率查找:顯示輸出字符“4”至少重複出現兩次的所有行
grep “9{3,}” test.txt 模式出現機率查找:顯示輸出字符“9”至少重複出現三次的所有行
grep “9{2,3}” test.txt 模式出現機率查找:顯示輸出字符“9”重複出現的次數在一定範圍內,重複出現2次或3次所有行
grep -n “^$” test.txt 顯示輸出空行的行號
ls -l |grep “^d” 如果要查詢目錄列表中的目錄 同:ls -d *
ls -l |grep “^d[d]” 在一個目錄中查詢不包含目錄的所有文件
ls -l |grpe “^d…..x..x” 查詢其他用戶和用戶組成員有可執行權限的目錄集合