正則表達式的定義:
計算機科學中,有一種使用單個字符串來描述、匹配一系列符合某個句法規則的字符串,它就叫做正則表達式。
正則表達式的功用:
在文本編輯器中,正則表達式通常被用來檢索、替換那些符合某個模式的文本。許多程序設計語言中,也都支持正則表達式來進行字符串的操作。因此它被廣泛應用到各種計算機語言和領域中。
正則表達式的分類:
正則表達式就其表現形式來說,一般分爲兩類。基本的正則表達式和擴展的正則表達式。下面我們就此展開說明:
基本正則表達式:
字符匹配:
.匹配任意單個字符
[]匹配指定範圍內的任意單個字符
[0-9],[[:digit:]]所有數字
[a-z],[[:lower:]]所有小寫字母
[A-Z],[[:upper:]] 所有大寫字母
[[:space:]] 空格
[[:punct:]] 所有標點符號
[[:alpha:]] 所有字母
[[:alnum:]] 所有數字和字母
[^]取反
.*匹配任意長度的任意字符
次數匹配:
*前面字符可出現任意次
\?前面字符可出現0次或1次
\{m\}前面字符要出現m次
\{m,n\}前面字符至少出現m次,至多出現n次
\{m,\}前面字符至少出現m次
\{0,n\}前面字符至多出現n次
位置錨定:
^錨定行首
$錨定行尾
^$空白行
\<錨定詞首
\>錨定詞尾
分組引用:
\(\)分組
\#引用
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
擴展正則表達式:
字符匹配:
.匹配任意單個字符
[]匹配指定範圍內的任意單個字符
[0-9],[[:digit:]]所有數字
[a-z],[[:lower:]]所有小寫字母
[A-Z],[[:upper:]] 所有大寫字母
[[:space:]] 空格
[[:punct:]] 所有標點符號
[[:alpha:]] 所有字母
[[:alnum:]] 所有數字和字母
[^]取反
.*匹配任意長度的任意字符
次數匹配:
*前面字符可出現任意次
?前面字符可出現0次或1次
+前面字符至少出現1次
{m}前面字符要出現m次
{m,n}前面字符至少出現m次,至多出現n次
{m,}前面字符至少出現m次
{0,n}前面字符至多出現n次
位置錨定:
^錨定行首
$錨定行尾
^$空白行
\<錨定詞首
\>錨定詞尾
分組引用:
()分組
\#引用
或者:
#|n或者
---------------------------------------------------------------------------------------------------------------------------------
grep的定義:
grep全稱global search regular expression and print out the line,即全面搜索正則表達式並把行打印出來。
grep的功用:
grep是一種強大的文本搜索工具,能使用正則表達式搜索文本,並把匹配的行打印出來。
grep家族的分類:
Unix的grep家族包括grep、egrep和fgrep。egrep是grep的擴展,支持更多的正則元字符。而fgrep是fixed grep或fast grep,是把所有的字母都看作單詞,所以它不再支持正則表達式的應用。
grep的選項:
-v反向選取
-o僅顯示匹配的字串,而非字串所在的行
-iignore-case,忽略字符大小寫
-E支持使用擴展正則表達式
-A #顯示後面#行
-B #顯示前面#行
-C #顯示前後#行
--color=auto將匹配內容自動添加顏色
---------------------------------------------------------------------------------------------------------------------------------
實例:
1.顯示/proc/meminfo文件中以大寫或小寫S開頭的行;
grep -i '^s' /etc/passwd
2.顯示/etc/passwd文件中其默認shell爲非/sbin/nologin的用戶;
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
3.找出/etc/passwd文件中的一位數或兩位數;
grep "\<[0-9][0-9]\?\>" /etc/passwd
4.顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;
grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf