Linux常用命令——grep
grep 文本過濾工具
語法格式:grep 【options】【pattern】【file】 grep [參數] [匹配模式] [查找的文件]
註意:
1.grep 是 Linux 系統中最重要的命令之一,其功能是從文本文件或管道數據流中篩選匹配的行及數據。
2.grep 命令裏的匹配模式或模式匹配,都是你要好找的東西,可以是普通的文字符號也可以是正則表達式。
參數選項:
參數 | 說明 |
---|---|
-c | 計算找到‘搜索字符串’的行數 |
-o | 指數出匹配的內容 |
-i | 不區分大小寫 |
-n | 顯示匹配內容的行號 |
-r | 當指定要查找的是目錄而非文件時,必須使用這項參數,否則grep命令將回報信息並停止動作 |
-v | 反向選擇,即沒有‘搜索字符串’內容的行 |
-l | 列出文件內容符合指定的範本樣式的文件名稱 |
-E | 擴展 grep,即 egrep,可以使用擴展正則表達式 |
--color=auto | 搜索關鍵詞顯示顏色 |
-V | 顯示軟件版本信息 |
案例文件:
案例一:
參數舉例
註意:自己測試一些含有正則表達式的檢索,發現 egrep 可以實現的,grep 也可以實現。但例如:egrep -v "^$|#" file1.txt ,grep 就實現不了,是因為 egrep 增加了額外的正則表達式元字符集的效果,而對於標準grep,這時在擴展元字符前面加 \ ,grep 便會自動啟用擴展選項-E
案例二:
grep正則表達式元字符集
字符集 | 說明 | 案例 |
---|---|---|
\^ | 錨定行的開始 | 如:‘^grep‘ 匹配所有以 grep 開頭的行 |
$ | 錨定行的結束 | 如:‘grep$‘ 匹配所有以 grep 結尾的行 |
. | 匹配一個非換行符的字符 | 如:‘gr.p‘ 匹配 gr 後接一個任意字符,然後是 p |
* | 匹配零個或多個先前字符 | 如:‘ *grep‘ 匹配所有一個或多個空格後緊跟 grep 的行。 .* 一起用代表任意字符 |
[ ] | 匹配一個指定範圍內的字符 | 如:‘[Gg]rep‘ 匹配 Grep 和 grep |
[^ ] | 匹配一個不在指定範圍內的字符 | 如:‘[^A-FH-Z]rep‘ 匹配不包含 A-F 和 H-Z 的一個字母開頭,緊跟 rep 的行 |
\(..\) | 標記匹配字符 | 如:‘(love)‘,love 被標記為1 |
\< | 錨定單詞的開始 | 如:‘\<grep‘ 匹配包含以grep開頭的單詞的行 |
\> | 錨定單詞的結束 | 如:‘grep\>‘ 匹配包含以grep結尾的單詞的行 |
x{m} | 連續重復字符 x,m 次 | 如:‘o{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 |
\W | w 的反置形式,匹配一個非單詞字符 | 如:點號句號等。\W* 則可匹配多個 |
\b | 單詞鎖定符 | 如: ‘\bgrep\b‘ 只匹配 grep,即只能是 grep 這個單詞,兩邊均為空格 |
案例三:
常見用法
註意:去掉空行與註釋行
案例四:
遞歸搜索文件
案例五:
grep搜索結果中包括或者排除指定文件
1.--exclude 在搜索結果中排除等號後所有文件
2.--exclude-from 在搜索結果中排除filelist文件列表裏的文件
3.--include 只在所指定的目錄文件中遞歸搜索字符 " and "
案例六:
使用0值字節後綴的 grep 與 xargs
註意:-Z 參數個人理解為取消換行符"以一行的形式顯示內容",xargs -0 是來解決不能"以一行的形式執行顯示內容“傳參這個問題的,-Z通常和-l結合使用。(-Z選項來指定以0值字節作為終結符文件名(\0),xargs -0 讀取輸入並用0值字節終結符分隔文件名)
案例七:
打印出匹配文本之前或者之後的行
註意:如果匹配結果有多個,會用 " -- " 作為各匹配結果之間的分隔符,如果多個結果顯示的行數相連或重疊則不會顯示 " -- " 分隔符
Linux常用命令——grep