作用
在文件或標准輸入中,通過正則表達式查找對應的內容
語法格式
grep [選項]... PATTERN [FILE]...
grep的常用選項參數
| 參數選項 | 描述 |
| -G | 默認值 |
| -F | 相當於使用fgrep,但必須用 -F |
| -E | 相當於使用egrep,但必須用 -E |
| -V | 打印 grep 的版本號 |
-E 的栗子
前提
當 grep 想同時過濾多個條件或操作
錯誤寫法
默認不支持多條件匹配
ps -ef | grep "java|tomcat"
正確寫法
ps -ef | grep -E "java|tomcat"

匹配控制選項參數
| 參數選項 | 描述 |
| -e | PATTERN 來進行匹配操作 |
| -f | 從文件中取得 PATTERN |
| -i | 忽略大小寫 |
| -v | 反轉匹配,選擇沒有被匹配到的內容 |
| -w | 匹配整詞,精確地單詞,單詞的兩邊必須是非字符符號(即不能是字母數字或下划線) |
| -x | 僅選擇與整行完全匹配的匹配項 |
| --line-buffered | 有一個文件是動態的,它不斷地添加信息到文件的尾部,而你想要輸出包含某些信息的行。即持續的grep一個動態的流 |
-e 的栗子

當你有多個正則表達式想同時匹配時,可以用 -e,一個 -e 接一個正則表達式,它們是或的關系,不是與的關系
-f 的栗子

-i 的栗子

-v 的栗子

-w 的栗子

-x 的栗子

一般輸出控制選
| 參數選項 | 描述 |
| -s | 禁止顯示錯誤信息 |
| -q | 安靜模式,不會有任何輸出內容,查找到匹配內容會返回0,未查找到匹配內容就返回非0 |
| -m num | 匹配 num 次后停止 |
| -c | 匹配成功數量 |
| -l | 列出匹配成功結果的文件來源(標准輸入或文件名稱) |
| -H | 給每一個匹配結果打印來源(標准輸入、文件名) |
-q
目前沒發現有什么用

-m 的栗子

-c 的栗子

-l 的栗子

ls 輸出的內容就是標准輸入
輸出控制參數講解
| 參數選項 | 描述 |
| -b | 輸出的同時打印字節偏移 |
| -n | 輸出的同時打印行號 |
| -H | 給每一個匹配結果打印來源(標准輸入、文件名) |
| -h | 輸出是不顯示來源(默認) |
| -o | 只顯示匹配 PATTERN 的部分 |
-b 的栗子

-n 的栗子

-H 的栗子

因為結果都來源於 ls 的標准輸入,所以顯示標准輸入,如果是來源於某個文件則會顯示文件名

-o 的栗子

上下文線控制選項
| 參數選項 | 描述 |
| -A num | 匹配到搜索到的行以及該行下面的num行 |
| -B num | 匹配到搜索到的行以及該行上面的num行 |
| -C num | 匹配到搜索到的行以及上下各num行 |
備注
感覺就是為了好看而已
-A 的栗子

-B 的栗子

-C 的栗子

文件和目錄選項
| 參數選項 | 描述 |
| -a | 不忽略二進制的數據 |
| -d | 當要查找的是目錄而非文件時,必須使用這項參數 |
| -r | 以遞歸方式讀取每個目錄下的所有文件; 這相當於-d recurse選項。 |
-r 的栗子

巨常用的語法
重點
寫的正則表達式最好用 '' 包起來,當碰到需要轉義符的時候才會生效
查找指定進程
ps -ef | grep java
查找指定進程並統計數量
ps -ef | grep -c java
從文件中查找關鍵字
grep src test.txt
從文件中查找關鍵字並輸出它的行號
grep -n src test.txt
從多個文件中查找關鍵字
grep src src.txt src1.txt src2.txt
從文件中查找關鍵字后,再從結果中找到指定關鍵字
cat src.txt | grep -v s | grep -w lib
找出文件中的空白行
grep -n ^$ test.txt
顯示當前目錄下面以 .txt 結尾的文件中的所有包含每個字符串至少有4個連續小寫字符的字符串的行
grep -n '[a-z]\{4\}' *.txt
待補充
