grep

首先建立咱們練習grep命令時須要用到的demo文件demo_file。linux

$ cat demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.

Two lines above this line is empty.
And this is the last line.

1.從單個文件中搜索指定的字串

grep的基礎用法是以下例的從指定的文件中搜索特定的字串。git

語法:
grep "literal_string" filename

 

$ grep "this" demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

2. 在多個文件中檢索指定的字串

語法:
grep "string" FILE_PATTERN


先拷貝demo_file爲demo_file1。grep的結果在符合條件的行前將包括文件名。當文件名包含元字符時,linux shell會將匹配的全部文件做爲輸入到grep中去。正則表達式

 

$ cp demo_file demo_file1

$ grep "this" demo_*
demo_file:this line is the 1st lower case line in this file.
demo_file:Two lines above this line is empty.
demo_file:And this is the last line.
demo_file1:this line is the 1st lower case line in this file.
demo_file1:Two lines above this line is empty.
demo_file1:And this is the last line.

3. 用 grep -i 進行大小寫無關的搜索

語法:
grep -i "string" FILE


也是一個基本用法,對搜索的字串忽略大小寫,所以下例中匹配「the」, 「THE」 and 「The」。shell

 

$ grep -i "the" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
And this is the last line.

4. 使用用正則表達式

語法:
grep "REGEX" filename


若是你能有效地利用正則表達式,這是個頗有用的特色。在下面的例子中,搜索所有以「lines」開始以「empty」結束的字串,如搜索「lines[之間任意字]empty」 ,而且忽略大小寫。this

 

$ grep -i "lines.*empty" demo_file
Two lines above this line is empty.

 

正則表達式遵循的幾個重複的操做spa

  • ? 最多匹配一次
  • * 匹配零次或者任意屢次
  • + 匹配一次以上
  • {n} 匹配n次
  • {n,} 最少匹配n次
  • {,m} 最多匹配m次
  • {n,m} 匹配n到m次

5. 用grep -w搜索整個詞,而不是詞中的部分字串

使用-w選項搜索一個單詞,而且避免搜索到詞中的部分字串。

下例搜索"is"。若是不加-w選項,將顯示「is」, 「his」, 「this」 等全部包含「is」的行。遞歸

$ grep -i "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
Two lines above this line is empty.
And this is the last line.


下例使用了-w選項,請注意結果中不包含 「This Line Has All Its First Character Of The Word With Upper Case」, 雖然 「This」中包含「is」。underscore

$ grep -iw "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

6. 使用grep -A, -B and -C顯示以前、以後、先後的幾行

當使用grep搜索大文件時,顯示匹配行附近的多行數據是一個頗有用的功能。string


建立以下文件it

$ cat demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

* e - go to the end of the current word.
* E - go to the end of the current WORD.
* b - go to the previous (before) word.
* B - go to the previous (before) WORD.
* w - go to the next word.
* W - go to the next WORD.

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

6.1 顯示匹配行以後的N行

-A

語法:
grep -A "string" FILENAME


下例顯示匹配行和以後的3行數據

$ grep -A 3 -i "example" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

6.2顯示匹配行以前的N行

-B

語法:
grep -B "string" FILENAME


下例顯示匹配行和以前的2行數據

$ grep -B 2 "single WORD" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

6.3顯示匹配行先後的N行

-C 顯示以前的n行,以後的n行數據.

$ grep -C 2 "Example" demo_text
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD

7.經過GREP_OPTIONS高亮顯示搜索的字串

若是你但願搜索的字串高亮顯示在結果中,能夠試用如下的辦法。

經過修改GREP_OPTIONS對搜索字串高亮顯示。

 

$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

$ grep this demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

8. 用grep -r遞歸搜索所有的文件

若是想查找當前目前以及其子目錄的所有文件時,可使用 -r 選項。以下例

$ grep -r "ramesh" *

9. 使用grep -v進行不匹配

可使用-v選項顯示不匹配搜索字串的行。下例顯示demo_text文件中不包含「go」的行

$ grep -v "go" demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.

10. 顯示不匹配所有模式的行

語法:
grep -v -e "pattern" -e "pattern"

 

建立以下例子文件

$ cat test-file.txt
a
b
c
d

$ grep -v -e "a" -e "b" -e "c" test-file.txt
d

11.用grep -c 統計匹配的行數

語法:
grep -c "pattern" filename

 

$ grep -c "go" demo_text
6


統計不匹配的行數

$ grep -v -c this demo_file
4

12. 用grep -l 只顯示文件名

$ grep -l this demo_*
demo_file
demo_file1

13. 只顯示匹配的字串

缺省顯示匹配字串的所在行,可使用-o選項只顯示匹配的字串。這項功能當使用正則表達式時比較有用處。

$ grep -o "is.*line" demo_file

is line is the 1st lower case line
is line
is is the last line

14. 顯示匹配的位置

語法:
grep -o -b "pattern" file

 

$ cat temp-file.txt
12345
12345

$ grep -o -b "3" temp-file.txt
0:3
6:3


注意: 以上輸出顯示的不是行內的位置,而是整個文件中的字節byte位置

15. 用 grep -n 在輸出時顯示行號

行號從1開始

$ grep -n "go" demo_text5: * e - go to the end of the current word.6: * E - go to the end of the current WORD.7: * b - go to the previous (before) word.8: * B - go to the previous (before) WORD.9: * w - go to the next word.10: * W - go to the next WORD.
相關文章
相關標籤/搜索