1、grepgit
(1)grep簡介正則表達式
grep:全稱是Global search REgular expression and Print out the line,全局搜索正則表達式並輸出合適的行。express
grep是一種強大的文本搜索工具,根據用戶指定的文本模式(搜索條件)對目標文件進行逐行搜索,顯示能匹配到的行。(只對文本進行搜索處理)編輯器
Unix的grep家族包含grep、egrep和fgrep。ide
(2)grep的用法工具
語法格式:grep [option]... 'PATTERN' FILE...spa
選項 文本模式 文件regexp
命令選項:blog
--color=auto :自動標記顏色(對匹配到的字符串標記顏色,默認是紅色)ip
-v: 反向選取(只顯示沒有被匹配到的行)
-o: 僅顯示匹配的字串,而非字串所在的行
-i: (ignore-case)忽略字符大小寫
-A # :顯示匹配到的行和該行的後#行 (#表示數字)
-B # :顯示匹配到的行和該行的前#行
-C # :顯示匹配到的行、該行的前#行和該行的後#行
-E: 支持使用擴展正則表達式(至關於使用egrep命令)
grep不是拿整行匹配的,是按字串匹配的。(當在一行中第一次匹配到指定的字符串時,它不會直接跳到下一行再去匹配,而是在本行繼續日後匹配。)
grep工做於貪婪模式:儘量多的去匹配
要想使用grep的高級用法,須結合正則表達式和管道一塊兒使用。所以,接下來讓咱們撥開迷霧,走進正則表達式的花園。
2、正則表達式簡介
正則表達式:
正則表達式,又稱正規表示法、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。
正則表達式使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些符合某個模式的文本。
其實正則表達式就是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等功能;
元字符:
正則表達式中具備特殊意義的專用字符(相似於C語言中的關鍵字);
不表示其字面意義,而用於額外功能性描述
分類:
正則表達式分爲兩類: 「基本正則表達式」和「擴展正則表達式」
grep內置「基本正則表達式」的功能,也可使用grep -E 利用「擴展正則表達式」的功能。
egrep內置「擴展正則表達式」的功能。
fgrep: 不支持使用正則表達式
3、基本正則表達式
基本正則表達式的元字符:
(1)字符匹配:
.: 匹配任意單個字符
[]: 匹配指定範圍內的任意單個字符
[0-9], [[:digit:]] (單個0-9的數字)
[a-z], [[:lower:]] (單個小寫字母)
[A-Z], [[:upper:]] (單個大寫字母)
[[:space:]] (空格)
[[:punct:]] (單個標點符號)
[[:alpha:]] (單個字母,包括大小寫)
[[:alnum:]] (單個數字或字母)
[^]:匹配指定範圍內外的任意單個字符
(2)次數匹配元字符:用於實現指定其前面的字符所可以出現的次數
*: 任意長度,它前面的字符能夠出現任意次
\?: 0次或1次,它前面的字符是無關緊要的
\{m\}: m次,它前面的字符要出現m次
\{m,n\}: 至少m次,至多n次(m<n)
\{m,\}:至少m次
\{0,n\}: 至多n次
.*:任意長度的任意字符
(3)位置錨定:
^: 行首錨定;寫在模式最左側
$: 行尾錨定:寫在模式最右側
^$: 空白行
\<: 錨定詞首,出現於單詞左側,也可用\b
\>: 錨定詞尾,出現於單詞右側, 也可用\b
(不包含特殊字符的連續字符組成的串叫單詞)
(4)分組:
\(\) :分組的格式
分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,以後可被引用。
引用有編號:自左然後的左括號,以及與其匹配右括號(無論內嵌多少個括號,都是從左到右編號的。)
例如,\(a\(b\(c\)\)mn\(x\)\).*\1 (\1引用的是第一個左括號以及與其匹配右括號間匹配的內容)
\#: 引用第n個括號所匹配到的內容,而非模式自己(#表示數字)(如,\(ab\(x\).*\2 : \2引用的是\(x\)的匹配內容)
例如:
\(ab\?c\).*\1
abcmnaaa abcmnabc(匹配成功) abcmnac acxyac(匹配成功)
4、擴展正則表達式
egrep內置「擴展正則表達式」的功能,也可以使用grep -E 利用「擴展正則表達式」的功能。
grep -E 'PATTERN' FILE...
egrep 'PATTERN' FILE...
(1)字符匹配:
. :匹配單個任意字符
[] :匹配指定範圍內的任意單個字符
[^] :匹配指定範圍外的任意單個字符
(2)次數匹配:
*:任意次
?: 0次或1次(無關緊要)
+: 至少1次;(至關於基本正則表達式的\{1,\})
{m}: 精確匹配m次
{m,n}: 至少m次,至多n次(m<n)
{m,} : 至少m次
{0,n} :至多n次
(3)位置錨定:
^ :行首錨定
$ :行尾錨定
\<, \b :詞首錨定
\>, \b :詞尾錨定
^$, ^[[:space:]]*$ :空白行
(4)分組:
() :
一樣可以使用引用:\1, \2, \3
| :或者(擴展正則表達式特有的)
例如:a|b表示a或者b
conC|cat :表示conC或cat
con(C|c)cat :表示conCat 或 concat