grep和正則表達式


在使用系統時,我們或多或少的有一些搜索、查找的需求,必須要在文本中搜索某個關鍵字,或者過濾出文本中某些特定的行。grep 命令就為我們提供了這樣一個功能,同時,grep 還可以使用正則表達式進行匹配,這是一個強大的功能,有必要好好掌握。

  1.grep 初體驗
  grep PATTERN [OPTIONS] FILE:在文件中按照模式進行查找。FILE 是我們要查找的目標文件,如果不指定目標文件,grep 將會從標准輸入中讀取輸入的內容,然后進行匹配。為了方便起見,本文的所有演示都在命令行中通過標准輸入進行。

grep PATTERN:最基本的用法,根據 PATTERN 進行查找

  如果沒有高亮顯示匹配到的內容,可以手動指定:grep --color PATTER 進行匹配,更可以使用命令別名,減少我們的輸入時間:alias grep="grep --color"。

grep PATTERN -i:忽略大小寫匹配
grep PATTERN -v:反轉輸出。匹配到的內容不輸出,只輸出沒被匹配到的內容。

grep PATTERN -o:只顯示匹配到的字串(PATTERN)。默認顯示匹配到的字串所在的整行文本。
  2.grep 和正則表達式
  正則表達式(Regular Expression 或 REGEXP)分為基礎正則表達式(Basic REGEXP)和擴展正則表達式(Extended REGEXP)。grep 默認采用基礎正則表達式,如需使用擴展正則表達式需要附加選項。  

  由於介紹正則表達式實在太過復雜,我想了很久也無法很好的組織語言,因此這里就不再對正則中的元字符進行一一的介紹了。需要了解這方面的同學,可以去看一下三十分鍾入門正則表達式系列的教程,應該很快就能學會。

使用 grep 進行簡單的正則匹配
  "[]" 表示匹配 [] 中出現的任意一個字符,[a-zA-Z] 表示匹配所有的英文字母。

  "[^]" 表示匹配出去 [] 中出現的字符之外的任意字符。

  

  在正則表達式中,'' 號不再表示任意字符,而表示其前的字符可以出現任意次。有時候我們在命令中使用 '' 進行通配符匹配文件,要注意它在正則表達式中的不同用法。在正則表示中使用 '.' 點號來匹配任意字符。

  在正則中,'.' 點號表示不為空的任意字符。 

 ".*" 表示匹配出現任意次數的任意字符。正則表達式默認處於貪婪模式,因此在第一次匹配到結果后,還會進行多次匹配,知道沒有匹配為止。

  "?" 表示匹配前面的字符出現 0 次 或者 1 次,注意這個問號需要被轉義。

  

  "{m,n}" 表示前面的字符出現最少 m 次,最大 n 次。"{m,}" 表示前面的字符至少出現 m 次,"{,n}" 表示前面的字符至多出現 n 次。

  

  '^' 和 '$' 是正則表達式中的兩個位置錨定。'^' 表示其后的字符必須出現在行首,而 '$' 表示其前的字符必須出現在行尾,"^$" 表示匹配空白字符。

   "<" 和 ">" 用來錨定單詞,二者不一定要成對出現,也可以使用 "\b" 進行錨定。"\bWORD" (或者 "<WORD>") 表示匹配以 WORD 開頭的單詞,"WORD\b" 表示匹配以 WORD 結尾的單詞,"\bWORD\b" 表示完完全全匹配 WORD 單詞。

  "()" 表示對 PATTERN 進行分組,分組還支持后向引用,使用 "\1","\2" 等引用前面的分組。后向引用只匹配和前面相同的內容。

  '|' 表示或,匹配其前或者其后的單詞,注意並不是匹配字符,如需匹配字符,需要使用分組進行限定。我這里使用的是擴展正則,如需使用基本正則,需要將 '|' 換為 "|"。

  3.擴展正則表達式
  grep 同時還支持擴展正則表達式,在使用擴展正則表達式是,需要使用 -E 選項。基礎正則表達式和擴展正則表達式中的一些區別:

基礎正則中使用 ?,擴展正則中使用 ?
基礎正則中使用 (),擴展正則中使用 ()
基礎正則中使用 {},擴展正則中使用 {}
  在基礎正則表達式中匹配 ?,(),{} ,不需要進行轉移,而在擴展正則表達式中則需要加上轉義符號 \。

  擴展正則表達式中的其他選項:

\s:匹配空白字符
\S:匹配非空白字符
\w:匹配字母,數字,相當於 [0-9a-zA-Z]
\W:不匹配字母和數字,相當於 [^0-9a-zA-Z]
  4.grep 的其他選項
grep PATTERN FILE -A NUM:使用 grep 進行匹配之后,顯示匹配的行,同時向后顯示指定的行
grep PATTERN FILE -B NUM:和上面相反,向后顯示指定行
grep PATTERN FILE -C NUM:進行匹配之后,分別向前和向后顯示指定的行,相當於 -AB NUM
grep PATTERN FILE -c:顯示被匹配到的行數
grep PATTERN FILE -F:相當於 fgrep
grep PATTERN FILE -P:使用 Perl 風格的正則表達式
\d:匹配任意十進制數字,相當於 [0-9]
\D:匹配任意非數字字符,相當於 [^0-9]
  5.egrep 和 fgrep
  在使用 grep 時,如果想要開啟擴展正則表達式,需要指定 -E 選項,而 egrep 命令則是默認支持擴展正則表達式。因此在需要使用擴展正則表達式時推薦使用 egrep 代替 grep -E。

  fgrep 表示快速匹配,不支持正則表達式,沒有轉義的概念,會對 PATTERN 中的所有字符進行匹配。

  6.總結
  本篇我們介紹了 grep 命令和正則表達式的基本使用,grep 是 Linux 下的一個文本處理命令,配合正則表達式使用,其功能非常強大。grep 主要用來查找操作,如果想使用替換等更加強大的功能,就需要使用 sed 或者 awk 命令。grep,sed,awk 被稱為 Linux 下的三個文本處理殺器,等學到相應的章節再繼續介紹 😃

作者:Charleylla  轉載請注明出處:http://www.cnblogs.com/charleylla/p/5988885.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM