
一、grep簡介
1.介紹
全局查找正則表達式并且打印結果行的命令。
2.輸入
一個文件或者一個標準輸入(stdin),或者是一個“-”連字符()。
3.輸出
打印在屏幕上
4.grep家族擴展命令
egrep、fgrep
二、 Grep命令的應用
1.命令格式
grep [選項] 模式 [文件…]
例如:grep root /etc/passwd
(1) grep在文件/etc/passwd中查找模式root
(2) 如果查找成功,文件中相應的行會顯示在屏幕上;如果沒有找到指定的模式,就不會有任何輸出。
(3) 如果指定的文件不是一個合法文件,屏幕上會顯示報錯信息。
(4) 如果發現了要查找的模式,grep就返回退出狀態0,表示成功;如果沒找到,返回的退出狀態為1;找不到指定文件時,退出狀態將是2。
(5) grep的程序輸入可以來自標準輸入或管道、文件。
(6) 如果忘了指定文件,grep會以為你要從標準輸入獲取輸入,于是停下來等你鍵入一些字符。
(7) 如果輸入來自管道,就會有另一條命令的輸入通過管道變成grep命令的輸入。
例如:ps -ef | grep root
ps命令的輸出被送到grep,然后所有包含root的行都被打印到屏幕上。
2.原理
grep命令在一個或多個文件中查找某個字符串的模式。
3.注意
(1) 如果模式中包含空格,就必須用引號括起來。
(2) 模式可以是一個被括號括起來的字符串,也可以是單個詞。
(3) 位于模式之后所有的單詞都被視為文件名。
(4) grep不會對輸入文件進行任何修改和變化。
三、正則表達式元字符
grep支持很多正則表達式元字符,以便用戶更精確的定義要查找的模式。

四、grep選項

五、grep使用正則表達式示例
1. grep root /etc/passwd

2. grep ^root /etc/passwd

3. grep login$ /etc/passwd

4. grep 'bind Da' /etc/passwd

因為bind和Da中間有空格所以加了單引號,否則只會匹配bind
5. grep '5..' test.txt

打印所有包含5,后面跟一個.號,再跟一個任意字符的行。.代表單個字符,被轉義后,只代表本身一個.號
6. grep '^[rt]' /etc/passwd

7. grep '[^0-9]' test.txt

8. grep '[A-Z][A-Z][A-Z]' test.txt

9. grep "root*" /etc/passwd

10. grep '[a-z]{9}' /etc/passwd

11. grep '' test.txt

12. grep '' /etc/passwd

打印所有包含以小寫字母開頭,以n結尾,中間由任意多個字符組成的單詞的行,注意:符號.*代表任意字符,包括空格
六、 grep選項示例
1. grep -n 'north' test.txt

2. grep -i 'pid' test.txt

3. grep -v 'root' /etc/passwd

4. grep -l 'root*' /etc/passwd ~/test.txt

使用-l使grep只輸出包含模式的文件名,而不輸出文本行
5. grep -c 'root' /etc/passwd

打印含有模式的行的數目
6. grep -w 'north' test.txt

查找作為一個詞,而不是詞的一部分出現的模式
七、 grep與管道
1. ls | grep 'test'

2. ls | grep ^te

ls命令輸出通過管道傳給grep
八、 egrep擴展
egrep在grep的基礎上增加了更多的元字符。但是egrep不允許使用{},{}
1. egrep使用的正則表達式元字符

2. 示例

grep不支持”|“這個,egrep支持”|“,egrep查到了包含west或north的行