grep、正則表達式
-
grep:文本過濾(模式:pattern)工具
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。
模式:由正則表達式字符及文本字符所編寫的過濾條件。 -
正則表達式:由一類特殊字符及文本所編寫的模式,其中有些字符不表示字符字面意義,而表示控制或通配的功能。
正則表達式分為兩類:基本正則表達式、擴展正則表達式 - grep工具支持基本正則表達式,egrep支持擴展正則表達式,fgrep快速搜索,不支持正則。
grep
-
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
–color==auto 高亮顯示匹配到的字符串
-o 僅顯示匹配到的字符串
-v 取反、顯示不能被pattern匹配到的行
-i 忽略字符的大小寫
-n 顯示行號
-c 顯示統計到的行數,等同于wc -l
-q 靜默輸出 只關心命令的執行結果 不關心輸出結果
-e 指定多個條件,條件是或的關系
-w 匹配整個單詞
-A 后幾行
-B 前幾行
-C 前后幾行 查看日志 搜索關鍵字排查錯誤的時候
-E === egrep 支持擴展的正則表達式
-F === fgrep 不支持正則表達式
基本正則表達式
-
字符匹配
. :匹配任意單個字符
[] :匹配指定范圍內的任意單個字符
[^] :匹配指定范圍外的任意單個字符
以上[]中的范圍有以下幾種表示方法:-
[:alnum:] 所有的數字和字符
[:alpha:] 所有的字母(不區分大小寫)
[:lower:] 小寫字母
[:upper:] 大寫字母
[:space:] 專門匹配空格
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
[:digit:] 十進制數字 ;[:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
-
[:alnum:] 所有的數字和字符
-
次數匹配
用于在要指定次數的字符后面,用于前面的字符要出現的次數:*:匹配前面的字符任意次,0 到無窮次
注:默認情況下,正則表達式是工作在貪婪模式下,能匹配多少就匹配多少
.* 任意字符出現任意次
a* a字符出現任意次
\? 匹配前面的字符出現0次或者1次
\+ 匹配前面的字符至少1次
\{n\} 前面的字符出現n次
\{m,n\}匹配前面的字符出現m到n次,m,n是一個范圍
\{,n\}匹配前面的字符最多出現n
\{m,\}匹配前的字符至少出現m次
\ 轉義符 -
位置錨定
^ 錨定行首,用于模式的最左側
$ 錨定行尾,用于模式的最右側^$ 匹配空行的
^[[:space:]] 行首是空白的字符
^[[:space:]]*$ 也是 空行
^a 以a開頭的行
b$ 以b結束的行
^a.*b$ 以a開頭 中間任意字符 以b結尾的行
^a.*[[:space:]]\{3\}.*b$ a開頭跟任意字符,中間出現三次空格再跟任意字符 以b結尾的行
^# 以#開頭的行\b \b 匹配詞首和詞尾 ;\bPATTERN\b
\< > 匹配詞首和詞尾 ;\<PATTERN\> -
分組 \(\)
將一個或多個字符捆綁在一起,當做一個整體進行處理,符號:()
(xy)*ab 表示xy這個整體可以出現任意次`
注:1、分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式:\1,\2,\3, …
2、后向引用:引用前面的分組括號中的模式所匹配的字符,而非模式本身 -
或者 \|
a \| b
C \| cat
擴展正則表達式
-
grep -E ‘PATTERN’ FILE…
egrep ‘PATTERN’ FILE… -
字符匹配
. :匹配任意單個字符
[] :匹配指定范圍內的任意單個字符
[^] :匹配指定范圍外的任意單個字符
以上[]中的范圍有以下幾種表示方法:-
[:alnum:] 所有的數字和字符
[:alpha:] 所有的字母(不區分大小寫)
[:lower:] 小寫字母
[:upper:] 大寫字母
[:space:] 專門匹配空格
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)
[:digit:] 十進制數字 ;[:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
-
[:alnum:] 所有的數字和字符
-
次數匹配
用于在要指定次數的字符后面,用于前面的字符要出現的次數:*:匹配前面的字符任意次,0 到無窮次
注:默認情況下,正則表達式是工作在貪婪模式下,能匹配多少就匹配多少
.* 任意字符出現任意次
? 匹配前面的字符出現0次或者1次
+ 匹配前面的字符至少1次
{n} 前面的字符出現n次
{m,n}匹配前面的字符出現m到n次,m,n是一個范圍
{,n}匹配前面的字符最多出現n
{m,}匹配前的字符至少出現m次 -
位置錨定
^ 錨定行首,用于模式的最左側
$ 錨定行尾,用于模式的最右側^$ 匹配空行的
^[[:space:]] 行首是空白的字符
^[[:space:]]*$ 也是 空行
^a 以a開頭的行
b$ 以b結束的行
^a.*b$ 以a開頭 中間任意字符 以b結尾的行
^a.*[[:space:]]\{3\}.*b$ a開頭跟任意字符,中間出現三次空格再跟任意字符 以b結尾的行
^# 以#開頭的行\b \b 匹配詞首和詞尾 ;\bPATTERN\b
\< > 匹配詞首和詞尾 ;\<PATTERN\> -
分組 ()
將一個或多個字符捆綁在一起,當做一個整體進行處理,符號:()
(xy)*ab 表示xy這個整體可以出現任意次 -
或者 |
a | b
C | cat
原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/72661