grep命令與正則表達式
什么是grep:
grep (縮寫來自Globally search a Regular Expression and Print)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。egrep支持擴展正則表達式的grep,fgrep快速搜索,不支持正則表達式。
grep命令:
–color:相當于auto,對匹配到的文本進行著色顯示
-v:顯示不被pattern匹配到的行(取反,找出不包含“pattern”的行)
-i: 忽略字符大小寫
-n:顯示匹配到的行號
-c:顯示統計匹配到的行數,等同于wc -l
-o:僅顯示匹配到的字符串
-q:靜默模式,不輸出任何信息
-A # :after ,后#行 (#:數字)
-B # :before ,前#行
-C # :context, 前后各#行
-e :實現多個選項間的邏輯or關系
-w:匹配整個單詞
-E:相當于egrep,支持擴展的正則表達式
-F: 相當于fgrep,不支持正則表達式
正則表達式
概念:正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。
目的:
- 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”);
-
可以通過正則表達式,從字符串中獲取我們想要的特定部分。
特點: - 靈活性、邏輯性和功能性非常的強;
- 可以迅速地用極簡單的方式達到字符串的復雜控制。
對于剛接觸的人來說,比較晦澀難懂。
正則表達式引擎
正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。
DFA 引擎在線性時狀態下執行,因為它們不要求回溯(并因此它們永遠不測試相同的字符兩次)。DFA 引擎還可以確保匹配最長的可能的字符串。但是,因為 DFA 引擎只包含有限的狀態,所以它不能匹配具有反向引用的模式;并且因為它不構造顯示擴展,所以它不可以捕獲子表達式。
傳統的 NFA 引擎運行所謂的“貪婪的”匹配回溯算法,以指定順序測試正則表達式的所有可能的擴展并接受第一個匹配項。因為傳統的 NFA 構造正則表達式的特定擴展以獲得成功的匹配,所以它可以捕獲子表達式匹配和匹配的反向引用。但是,因為傳統的 NFA 回溯,所以它可以訪問完全相同的狀態多次(如果通過不同的路徑到達該狀態)。因此,在最壞情況下,它的執行速度可能非常慢。因為傳統的 NFA 接受它找到的第一個匹配,所以它還可能會導致其他(可能更長)匹配未被發現。
元字符分類:字符匹配、匹配次數、位置錨定、分組
字符匹配:
常用選項:
. :匹配任意單個字符
[abc]:a|b|c
[^abc]:除abc之外的字符
[:alnum:]:字母和數字
[:alpha:]:英文大小寫字符 a-z A-Z
[:lower:]:小寫字母
[:upper:]:大寫字母
[:space:]:專門匹配空格
不常用選項:
[:cntrl:]:不可打印的控制字符(退格、刪除、警鈴……)
[:digit:]:十進制數字
[:xdight:]:十六進制數字
[:graph:]:可打印的非空白字符
[:print:]:可打印字符
[:punct:]:標點符號
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* : 匹配前面的字符任意次,0到無窮
.*:任意字符出現任意次,比如說 123 456 abc
a*:a字符出現任意次 aaaa aa
[[:lower:]]*:任意小寫字母出現任意次
\? :匹配前面的字符出現0次或1次
例:a\? 出現0次或1次
\+:匹配前面的字符至少1次
例:a+ a至少出現1次
\{n\}:前面的字符出現n次
例:[0-9]\[3\] 000-999
\{m,n\}:匹配前面的字符出現m到n次,m、n是一個范圍
\[,n\]:匹配前面的字符最多出現n
例:[0-9]\{,3\}最大匹配是999
\{m,\}:匹配前的字符至少出現m次
[0-9]\{3,\} 000 無窮
位置錨定:用來定位字符出現的位置
^ : 錨定行首
$: 錨定行尾
^$ :匹配空行的
^[[:space:]] :行首是空白的字符
^[[:space:]]*$:也是空行
^a:以a開頭的行
b$:以b結尾的行
^a.*b$:以a開頭,中間任意字符,以b結尾
^a.*[[:space:]]\{3\}.*b$:以a開頭跟任意字符,中間出現三次空格在跟任意字符以b結尾的行
^#:以#開頭的行
\b \b :匹配詞首和詞尾
\< >:匹配次首和詞尾
\broot \b = \<root \>
分組:將匹配規則分成不同的組 使用1 2 3 … 等數字去標示,便于后面使用同樣規則的時候可以直接引用
\| : 或
例:a \| b a或b
擴展正則表達式
. :單個字符
[ ]:中括號范圍內的字符
*:匹配前面字符的任意次
?:0或者1次
+:1次或者多次
{m}:匹配m次
{m,n}:至少m次 至多n次
|:或者 a|b a或者b
^:行首
$:行尾錨定
\<,\b:語首
\>,\b:語尾
( ):分組 向后引用 \1 \2
原創文章,作者:木,如若轉載,請注明出處:http://www.www58058.com/72810
詳細介紹了grep命令與正則表達式的使用,內容寫的非常詳細,但需要注意一下排版的問題,也可以適當的加入圖片