grep

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” 查詢其他用戶和用戶組成員有可執行權限的目錄集合

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