Unix GREP的用法

jopen 10年前發布 | 60K 次閱讀 Unix GREP UNIX

Unix GREP的用法
grep(全局正則表達式版本)允許對文本文件進行模式查找,grep支持基本正則表達式,也支持其擴展集。
grep有三種變形:
grep 標準grep命令
egrep 擴展grep命令,支持基本及擴展的正則表達式,但不支持\q模式范圍的應用
fgrep 快速grep命令,允許查找字符串而不是一個模式,不要誤解fast,其實和grep速度相當
grep的一般格式:
grep [選項] 基本正則表達式[文件] 這里的基本正則表達式可為字符
使用雙引號:
字符串參數最好使用雙引號擴起來,一是以防被誤解為shell命令,二是可以用來查找多個單詞組成的字符串,在調用變量的時候也要使用
雙引號,比如grep "$MYVAR",否則無結果,在調用模式匹配是,應使用單引號
grep的選項:
-c 只輸出匹配行的計數,比如grep -c "test" *.txt,將顯示4,則說明包含test的有4行
-i 不區分大小寫(只適用于單字符),比如grep -i "Bank" *.c等同于grep -i "bank" *.c
-h 查詢多文件時不顯示文件名
-l 查詢多文件時只輸出包含匹配字符的文件名
-n 顯示匹配行及行號,在顯示出內容的每行前面會顯示行數
-s 不顯示不存在或無匹配文本的錯誤信息
-v 顯示不包含匹配文本的所有行,grep -v "test" abc.txt,將顯示不包含"test"的行內容
-w 以單詞為單位進行匹配
-E 允許使用擴展模式匹配
grep和正則表達式:
使用正則表達式最好使用單引號括起來,避免參數被做為shell命令執行
^ 錨定行的開始 如:'^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次,如:'0\{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的反置形式,匹配一個或多個非單詞字符,如點號句號等。
\b 單詞鎖定符,如: '\bgrep\b'只匹配grep。
模式范圍: grep '48[a-z]' *.txt
不匹配行首: grep '^[^48]' *.txt 查找行首不是48的行內容
設置大小寫: grep '[Ss]ept' *.txt 查找Sept和sept內容
匹配任意字符: grep 'K...D' *.txt grep '[A-Z][A-Z]..C' *.txt
"與"和"或": grep -E '219|216' *.txt 查找包含219或者216的行內容
空行: grep '^$' *.txt
類名:[[:upper:]] -> [A-Z] [[:lower:]] -> [a-z]
[[:digit:]] -> [0-9] [[:alnum:]] -> [0-9a-zA-Z]
[[:space:]] -> 空格或者tab鍵 [[:alpha:]] -> [a-zA-Z]
grep '5[[:upper:]]' *.txt 等同于 grep '5[A-Z]' *.txt
列出所有的目錄 ls -l |grep '^d' 
列出所有的非目錄 ls -l |grep '^[^d]'  或 ls -l |grep -v '^d'

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!