正則表達式:Regular Expression REGEXP
由一類特殊字符及文本字符所編寫的模式,表示控制或通配的功能
兩類:
基本正則表達式BRE:
擴展正則表達式ERE:
*** grep GLoble search Regular exression and Print out the line
文本過濾(一定模式pattern)2
-v 反向匹配 顯示未匹配到的行
-E 支持擴展正則表達式 egrep
-i 忽略字符大小寫
-o 僅顯示匹配到的字符本身 而不是整行
-q --quiet 靜默模式,不輸出任何信息 可用echo $?查看命令執行情況
-A :after 顯示匹配行及其前n行
B :before 匹配行及其後n行
C :context 匹配行及其前後n行
1.基本正則表達式元字符:
. 任意 單個字符
* 前面字符 任意次 可以不出現 0 - ∞
.* 任意長度 任意字符
\? 其前面字符 0次或一次 可有可無
\+ 其前面字符 1次或多次
\{m,n\} 其前面字符m至n次
\{m\} 指定出現m次 \{,n\} 至多n次
[] 指定範圍內任意單個字符
[^] 指定範圍外的任意單個字符
數字 [:digit:],小寫字母[:lower:],大寫字母[:upper:],字母[:alpha:],
字母數字[:alnum:],標點[:punct:],空格[:space:]
使用時還需再加[] [[:digit:]] 任意單個數字
2.位置錨定: 指定字符出現位置
^ 行首錨定,整個模式最左側
$ 行尾錨定,整個模式最右側
^pattern$ 用patt匹配整行
^$ 空白行 不可包含空格 ^[[:space:]]*$ 空白行或包含任意空格的行
\<或\b 詞首錨定
\>或\b 詞尾錨定
\<pattern\>匹配完整單詞
3.分組及引用:
\(\) 括號內的字符作爲一組 \(xy\)\+ 一個或多個xy 括號可嵌套不可交叉
可用\1 \2 \3 …引用對應分組
*** 擴展正則表達式: 區別grep 部分元字符不用加"\" 增加或 |
egrep =>grep -E
1.擴展正則表達式的元字符:
.
[]
[^]
2.次數匹配: 不用加轉義字符 "\"
*
?
+
{m}
{m,n}
3.位置錨定:
^
$
\<,\b
\>,\b
4.分組及引用:
()
後向引用:\1 \2 \3 ...
5.或:
a|b a或者b z|Zjj z或Zjj (z|Z)jj zjj或Zjj
例 匹配1到255
egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'
例 passwd 用戶名與shell相同的行
egrep "^([^:]+\>).*\1$" /etc/passwd
例 簡單 過濾出ip地址 不嚴謹
egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
不支持正則表達式元字符:
fgrep: fast grep
用不到元字符時 fgrep更快