正則表達式詳解
一、概述
GREP(global search regular expression(RE) and print out the
line),是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。利用這些返回值就可進行一些自動化的文本處理工作。
二、語法格式
正則表達式: grep [option] …'pattern' file….
擴展正則表達:grep -E 'PATTERN' file….
fgrep :fast grep ,不支持使用正則表達式
語法格式上擴展正則表達式僅是比正則表達式多了一個參數 –E;
三、元字符集
1、字符匹配:
. : 匹配任意單個字符
[ ]: 匹配指定范圍內的任意單個字符
[0-9] [[:digit:]]
[a-z] [[:lower:]]
[A-Z] [[:upper:]]
[[:space:]] [[:punct:]] [[:alpha:]]
[^]:取反
2、次數匹配:用于實現指定其前面的字符所能夠出現的次數
*:任意長度,用于能夠匹配他前面的字符可以出現任意次
\?:0次或1次,他前面的字符可有可無的
\{m\}:m次,他前面的字符出現m次
\{m,n}: 至少m次,至多n次
\{m,\}:至少m次
\{0,n\}:至多n次
.*:任意長度的任意字符,工作于貪婪模式:盡可能的去匹配
3、位置錨定
行首錨定:^ :要寫在模式最左側
行尾錨定:$: 寫在模式最右側
^$ : 空白行 實例: grep "^$" /etc/issue | wc – l
不包含特殊字符的連續字符組成的串叫單詞
\<:詞首,出現在單詞左側
\<char
\>:詞尾, 出現于單詞右側
\>char
\b:詞首詞尾都行
4、分組模式
\(\):分組中的模式匹配到的內容,可由正則表達式引擎記憶在內存中,之后可被引用;
實例:grep "\(ro\)\{1,\}" /etc/passwd 至少出現一次
引用:有編號:自左而右的左括號,以及與其匹配的右括號;從內向外;
\#:引用第n個括號所匹配到的內容,而非模式本身
四、命令選項
-v:反向選取; 如: grep –v "^$" /etc/issue
-o:僅顯示匹配到的字串,而非字串所在的行 grep "r..t" /etc/passwd -o
-i : ignore-case :忽略字符大小寫 Cat , cat grep -i "cat"
-E:支持使用擴展正則表達式
-A #: 被匹配到后面的#行 — grep -A 1 "r..t" /etc/passwd
-B #: 前面
-C #:前后各一行
五、正則表達式和擴展正則表達式的字符集區別
1、字符匹配基本一致
2、次數匹配
*:任意次
?: 0或1次
+:至少1次
{m}:精確匹配m次
{m , n}: m到n次
{m,} :至少m次
{0,n}:最多n次
3、錨定基本一致
4、分組
()
引用: \1,\2,\3
或者:
a |b :a或者b
conC|cat : conC或者cat
con(C|c)at : conCat或者concat
六、實例解析
1、顯示/proc/meminfo文件中以大寫或小寫S開頭的行
2、顯示/etc/passwd中其默認shell為/bin/bash的用戶
3、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行
4、添加用戶,bash,testbash,basher,nologin(修改此shell為nologin)而后找出當前系統上其用戶名和默認shell相同的用戶
此題值得好好思考一番;
5、擴展題目:
新建一個文本文件,
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最后一個單詞是由此前某單詞加r構成的行
6、找出ifconfig命令結果中1-255之間的數字
7、挑戰題:寫一個模式,能匹配合理的ipv4地址
原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/4078