grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用特定模式匹配(包括正則表達式)搜索文本,並默認輸出匹配行。Unix的grep家族包括grep、egrep和fgrep, egrep和fgrep是grep的擴展,與Windows下命令 findstr 類似。
命令格式: grep string filename
--color 同—color=auto 高亮顯示匹配到的字符串,也可使用別名alias實現,alias grep=‘grep --color=auto’
-v --revert-match,反向查詢,即輸出沒有匹配到的字符串
-i --ignore-case,忽略大小寫
-n --line-number,在匹配到的內容前顯示行號
-c --count,匹配到字符串的行數(注意:不是匹配到的次數)
-o grep默認輸出匹配到字符串所在行的全部內容,-o選項僅顯示匹配到的字符串
每個匹配到的字符串都會顯示為一行,即若在一行中匹配到n個字符串,會輸出n行字符串(每行一個字符串)(用於統計字符串出現在文本中的次數)
-w 完全匹配整個單詞,不匹配含有字符串的單詞,例如 magic 不匹配會 magical
-a 把二進制文件當做文本處理
-An(after) 顯示匹配字符串及其后n行數據
-Bn(before) 顯示匹配字符串及其前n行數據
-Cn(context) 顯示匹配到的字符串及其前后n行
例:
grep 'linux' test.txt test2.txt //從多個文件中查找linux
多文件查詢時,會把文件名在行首輸出,並且加上":"作為標示符。
例:
find . -name ".log" | grep -i error | grep -vi "info"
1、使用find -name 來列出所有log文件,重定向給grep
2、使用grep -i 來查找包含error的行
3、使用grep -vi 來查找不包含info的行
egrep與grep -E
grep 過濾多個條件
錯誤寫法:
netstat -an|grep "ESTABLISHED|WAIT" //默認grep不支持多條件匹配
正確寫法:
netstat -an|grep -E "ESTABLISHED|WAIT" //grep -E 並將條件用""包起來,條件之間用“|”管道符分開
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同樣可以實現
awk '/123|abc/' filename // awk 的實現方式
與 & 或 | 非 !