正則表達式:
由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,而是表示控制和通配功能;
它可以分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep:
作用:文本搜索工具,根據用戶指定的模式對目標進行匹配檢查;打印匹配到的行;
正則表達式引擎:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
-i:ignorecase 忽略字符大小寫
-o:僅顯示匹配到的字符串本身;
-v:顯示不能被模式匹配到的行
-E:支持使用擴展的正則表達式元字符;
-q:靜默模式,即不輸出任何信息
-A:後行
-B:前行
-C:前後各行
基本正則表達式字符:
字符匹配:
.:匹配任意單個字符
[]:匹配指定範圍內的任意單個字符
[^]:匹配指定範圍外的任意單個字符
[:digit:] [:alnum:] [:lower:] [:upper:] [:alpha:] [:pucnt:] [:space:]
匹配次數:用在要指定其出現的次數的字符的後面,用於限制其前面字符出現的次數;默認工作於貪婪模式;
*:匹配任意長度的任意字符
\?:匹配其前面的字符0次或1c次;即其前面的字符是可有可無的;
\+:匹配其前面的字符1次或多次;即前面的字符出現至少1次;
\{m\}:匹配其前面的字符m次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
位置錨定:
^:行首錨定;用於模式的最左側;
$:行尾錨定;用於模式的最右側;
^pattern$:用於pattern來匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行
單詞:非特殊字符組成的連續字符(字符串)都成爲單詞;
\<或\b:詞首錨定,用於單詞模式的左側;
\>或\b: 詞尾錨定,用於單詞模式的右側;
分組及引用
\(\):將一個或多個字符捆綁在一起,當做一個整體進行處理;
\(xy\)*ab
note:分組括號中模式匹配到的內容會被正則表達式引擎自動記錄與內部的變量中,這些變量爲
\1:模式從左側起,第一個左括號以及與之匹配的右括號直接的模式所匹配到的字符;
\2:
\3:
後向引用:引用前面的分組括號中的模式所匹配到的字符;
egrep:
支持擴展的正則表達式實現類似於grep文本過濾功能:grep-E
-i ,-o ,-v, -q, -A -B -C
-G:支持基本正則表達式
擴展正則表達式元字符:
字符匹配
.:任意單個字符
[]:指定範圍內的任意個字符
[^]:指定範圍外的任意個字符
次數匹配
*:任意次,0次或者多次
?:0次或一次
+:至少1次
{m}:至少m次
{m,n}:至少m至多n
位置錨定
^:行首錨定
$:行尾錨定
\<:詞首錨定
\>:詞尾錨定
分組引用
():分組
或
a|b
例題
1、顯示當前系統root、mage或wang用戶的UID和默認shell
2、找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
4、使用egrep取出上面路徑的目錄名
5、統計以root身份登錄的每個遠程主機IP地址的登錄次數
6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
7、顯示ifconfig命令結果中所有IPv4地址
1:
[root@localhost ~]# egrep "^(root|mage|wang)\>.*" < /etc/passwd | cut -d: -f3,7
0:/bin/bash
1001:/bin/bash
1002:/bin/bash
2:
[root@localhost ~]# egrep "^[[:alpha:]_]+\(\).*" /etc/rc.d/init.d/functions
checkpid() {
3.
[root@localhost ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "[^/]+?$"
functions
4.
[root@localhost ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "^/.*/"
/etc/rc.d/init.d/
5.
[root@localhost ~]# netstat -nt | tr -s " " "#" | cut -d"#" -f5 | uniq -c
1 servers)
1 Address
1 172.18.16.41:52384
1 10.1.250.39:51374
6. ifconfig | egrep "\<([01]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|2[0-5][0-5])\>"
7.
[root@localhost ~]# ifconfig | egrep " netmask" | tr -s " " "+" | cut -d"+" -f3
172.18.16.8
127.0.0.1
192.168.122.1
8、用正則表達式表示手機號11 13 17 15 18
9、用正則表達式表示身份證號18
10、用正則表達式表示郵箱
8,
[root@localhost ~]# cat txt | grep -E -o "\b1[3587][0-9]{9,9}\>"
17715184033
15515184033
13312345678
15312345678
9,