Linux文本搜索工具grep
簡介
grep(全稱Globally search a Regular Expression and Print,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,根據用戶指定的“模式(pattern)”對目標文本進行匹配檢查,打印匹配到的行。
家族成員:
grep:支持基本正則表達式
egrep:相當于grep -E,支持擴展正則表達式
fgrep:相當于grep -F,不支持正則表達式
主要參數及使用
grep
格式: grep [OPTIONS] PATTERN [FILE…]
常用選項:
–color=auto:對匹配的文本著色顯示
注: CentOS 7默認設置該參數。
-v:顯示不能被pattern匹配到的行
# cat test how are you? hellow # grep -v are test hellow
提示:如test文件內容發生改變,會用cat命令將其展示,反之則表示內容不變
-i:忽略字符大小寫
# cat test how are you? HOW ARE YOU? # grep are test how are you? # grep ARE test HOW ARE YOU? # grep -i are test how are you? HOW ARE YOU?
-o:僅顯示匹配到的字符串
# cat test how are you? # grep -o are test are
-q:靜默模式,不輸出任何信息
靜默模式下不會輸出任何信息,命令的執行結果可以通過echo $?查詢。
# cat test name # grep -q name test # echo $? 0 # grep -q what test # echo $? 1
-A #:顯示匹配的后#行信息
# cat test how are you? HOW ARE YOU? hello # grep -A 1 ARE test HOW ARE YOU? hello
-B #:顯示匹配的前#行信息
# grep -B 1 ARE test how are you? HOW ARE YOU?
-C #:顯示匹配的前后各#行信息
# grep -C 1 ARE test how are you? HOW ARE YOU? hello
基本正則表達式
正則表達式由普通字符和元字符組成。普通字符包括大小寫字母和數字,而元字符則具有特殊意義,接下來將對元字符進行介紹。
-
字符匹配:
.:匹配任意單個字符
[]:匹配指定范圍內任意單個字符
[^]:匹配指定范圍外任意單個字符
專用字符集合:
[:digit:]:任意數字,相當于0-9
[:lower:]:任意小寫字母
[:upper:]:任意大寫字母
[:alpha:]:任意大小寫字母
[:alnum:]:任意數字或字母
[:space:]:空格
[:punct:]:標點符號
-
匹配次數:
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
*:匹配前面字符任意次
注:a*c篩選的是含有c的行,a*是指a可以出現任意次也可沒有。
.*:匹配任意長度的任意字符(.為任意字符 *為任意次數)
\?:匹配其前面的字符0或1次,即前面的可有可無
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{0,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
-
位置錨定:
^:行首錨定,用于模式的最左側
$:行尾錨定,用于模式的最右側
^PATTERN$:用模式匹配整行
^$:匹配空行,主要配合-v取反消除空行
^[[:space:]]*$:在^$匹配不到的時候使用
\<或\b:詞首錨定,用于單詞模式的左側
\>或\b:詞尾錨定,用于單詞模式的右側
\<PATTERN\>
:匹配整個單詞
-
分組:
\(\)
:將一個或多個字符捆綁在一起,當作一個整體進行處理
當我們想后續內容與前面模式匹配到的一樣,則需要使用到引用也稱后向引用。
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
注:分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
例: (ab+(xy)*)
\1: ab+(xy)*
\2: xy
egrep
egrep=grep -E
格式:egrep [OPTIONS] PATTERN [FILE…]
常用選項與grep相同
擴展正則表達式
相對于基本正則表達式而言擴展正則表達式在某些參數上可以不使用轉義符(\),在使用方式上并沒有區別
接下來將介紹擴展正則表達式與基本正則表達式不同的地方,相同點不再累述
-
次數匹配
?:匹配其前面的字符0或1次,即前面的可有可無
+:匹配其前面的字符至少1次
{m}:匹配前面的字符m次
{m,n}:匹配前面的字符至少m次,至多n次
-
分組
():將一個或多個字符捆綁在一起,當作一個整體進行處理
-
或者
注:基本正則表達式可以使用\|
代表或者
a|b:a或者b
C|cat:C或cat
(C|c)at:Cat或cat
fgrep
fgrep不支持正則表達式,表達式僅作普通字符處理
fgrep=grep -F
原創文章,作者:Net18-海濱,如若轉載,請注明出處:http://www.www58058.com/13872
贊。詳細有料
基本正則表達式是支持\|的。
修正:基本正則表達式可使用\|來代表或者,并非不支持,感謝twoyang提醒。