bash 正則表達式,文本文件查找 grep   egrep

1. 語法+選項

語法: grep  [-cinvABC]  'word'  filename
-c :打印符合要求的行數
-n :在輸出符合要求的行的同時連同行號一起輸出
-v :打印不符合要求的行
-A :後跟一個數字(有無空格都可以),例如 –A2
則表示打印符合要求的行以及下面兩行
-B :後跟一個數字,例如 –B2 則表示打印符合要求
的行以及上面兩行
-C :後跟一個數字,例如 –C2 則表示打印符合要求
的行以及上下各兩行
-r : 會把目錄下面所有的文件全部遍歷
grep -r 'root' /etc/    將目錄下所有文件全查一次

[0-9]  取括號中 任意1個


2. 例子介紹
過濾出帶有某個關鍵詞的行並輸出行號 grep -n 'root' 1.txt
過濾出不帶有某個關鍵詞的行並輸出行號grep -n -v 'root' 1.txt
過濾出所有包含數字的行 grep '[0-9]' 1.txt
過濾出所有不包含數字的行 grep -v '[0-9]' 1.txt
去除所有以'#'開頭的行 grep -v '^#' 1.txt
去除所有空行和以'#'開頭的行 grep -v '^$' 1.txt|grep -v '^#'
過濾出以英文字母開頭的行 grep '^[a-zA-Z]' 1.txt
過濾出以非數字開頭的行 grep '^[^0-9]' 1.txt
過濾任意一個或多個字符 grep 'r.o' 1.txt;
grep 'r*t' 1.txt; grep 'r.*t' 1.txt
. 表示任意一個字符;*表示零個或多個前面的字符 ;
.*表示零個或多個任意字符,空行也包含在內
指定過濾字符次數 grep 'o\{2\}' 1.txt




3. egrep
egrep工具 是grep工具的擴展
egrep 'o+' 1.txt   表示1個或1個以上前面字符
egrep 'o?' 1.txt  表示0個或者1個前面字符
egrep 'roo|body' 1.txt  匹配roo或者匹配body
egrep 'r(oo)|(at)o' 1.txt 用括號表示一個整體
egrep '(oo)+' 1.txt 表示1個或者多個 'oo'


4. . * + ? 總結
. 表示任意一個字符(包括特殊字符)
* 表示零個或多個*前面的字符
.* 表示任意個任意字符(包含空行)
+ 表示1個或多個+前面的字符
? 表示0個或1個?前面的字符
其中,+ ? grep不支持,egrep才支持。


^ 錨定行首,此字符後面的字符,必須出現在行首

$錨定行尾,此字符後面的字符,必須出現在行尾

[^]中的 "^"表示  非的意思

^$ 空行

\<或者\b   後面的任意字符 必須做爲單詞手部出現

\>或者\b 前面的任意字符,必須作爲單詞的尾部出現

\<root\> 爲整個單詞出現

\(\)分組: \(ab\)* 表示出現任意個 ab

擴展分組不需要加脫意;


a|b  表示 a 或者 b


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章