grep與egrep都是基於「PATTERN」對指定的文本進行搜索 (文本處理三劍客之一)git
grep與egrep的區別在於grep默認支持的是基本正則表達式egrep默認支持擴展的正則表達式正則表達式
先從grep的選項提及ide
使用格式:grep [OPTION]... PATTERN [FILE]...ui
有如下選項:
spa
-i, --ignore-case:忽略文本字符的大小寫regexp
-v, --invert-match:反向匹配;最終顯示的結果是PATTERN不能成功匹配的行blog
-C NUM, -NUM, --context=NUM:統計匹配PATTERN的全部的行數;圖片
-o, --only-matching;關閉貪婪模式,僅顯示PATTERN匹配的內容字符串
-q, --quiet, --silent:不輸出任何匹配結果get
--color[=WHEN], --colour[=WHEN]:將匹配的PATTERN內容以特殊顏色高亮顯示
-E, --extended-regexp:擴展的正則表達式,grep -E至關於egrep
-F, --fixed-strings, --fixed-regexp:至關於fgrep
-G, --basic-regexp:基本的正則表達式,即egrep -G至關於grep
-p,--perl-regexp:使用PCRE(perl Common Regular Expression)引擎;
-A NUM, --after-context=NUM:在顯示匹配PATTERN行的同時顯示其後面的NUM行
-B NUM, --before-context=NUM:在顯示匹配PATTERN行的同時顯示其前面的NUM行
-C NUM, -NUM, --context=NUM:在顯示匹配PATTERN行的同時顯示其先後的各NUM行
重要的部分就是PATTERN區域,系正則表達式元字符匹配;
字符匹配類:
.:匹配任意單個字符
例子:
[]:匹配範圍內的任意單個字符
[^]:匹配指定範圍之外的任意單個字符;
例子:
下列的全部的字符集均可以放置於[]之中用於匹配單個字符;
[:xdigit:]:全部的16進制數字
a-z:全部的小寫字母
A-Z: 全部的大寫字母
0-9:全部的十進制數字
次數匹配字符:該類字符以前的那個字符能夠出現的次數;
*:其前面的字符能夠出現人意次(0次,1次或屢次);
例子:
\?:其前面的字符無關緊要(0次或1次)
例子:
\+:其前面的字符至少出現一次(1次或屢次)
舉例:grep 'x*y' /PATH :匹配含有y字符前面有或沒有x字符的行
\{m\}:其前面的字符必須出現m次
例子:
\{m,n\}:其前面的字符至少出現m次,至多出現n次;(m<n)
\{,n\}:其前面的字符只收出現0次,至多出現n次
\{m,\}:其前面的字符至少出現m次,×××;
在正則表達式中,表示任意長度任意字符的方式:.*
位置錨定字符:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或\b
字尾錨定: \>或\b
\b:舊版本中的錨定方法,建議不使用;
例子: 查找顯示root用戶
對於正則表達式引擎來講,字是由非特殊字符組成的字符串
分組與引用字符:
\(PATTERN\):將PATTERN匹配到字符做爲一個總體來處理
例子:grep '\(xy\)\+' 文件名 匹配含有xy的行
在正則表達式引擎之中,有一系列內置變量,這些變量會保存全部分組內的字符信息,用於後向引用;這些變量一次是:\1,\2,\3,...
pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)
\1:pattern2
\2:pattern4
\3:pattern5
因此\1:第一組小括號中的pattern匹配到的字符;
\2:第二組小括號中的pattern匹配到的字符;
...
例子:找出在/etc/passwd中用戶的UID和GID相同的用戶帳戶:
或:\|
注意:\|將其左右兩遍的字符串看成總體對待
例子:找出ifconfig命令的執行結果中數值在100-255之間的整數;
第一位: 1 2
第二位: 0-9 0-4 5
第三位: 0-9 0-9 0-5
那麼egrep用法就是相似與grep 只不過egrep是用的擴展的正則表達式 就是去掉「\」的元字符
egrep :
egrep [OPTIONS] PATTERN [FILE...]
擴展的正則表達式元字符:
字符匹配:
.
[]
[^]
次數匹配:
*
?
+
{m}
{m,n}
{0,n}
位置錨定
^
$
\<,\b
\>,\b
分組和引用:
()
\1,\2,\3,...
或:
|