1.什么是正則表達式?
正則表達式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為,正則表達式通過一些特殊符號的復制,讓用戶可以輕易達到查找、刪除、替換某些特定字符串的處理程序。
正則表達式基本上是一種“表示法”,只要工具程序支持這種表示法,那么該工作程序就可以用來作為正則表達式的字符串處理之用。支持正則表達式的工具一般有grep、sed、awk、vi/vim等工具。
2.正則表達式和通配符有什么區別?
通配符代表的是bash操接口的一個功能,通配符多用在文件名上,比如查找find,ls,cp等。
正則表達式則是一種字符串處理的表示方式,正則表達式用在文本過濾工具里,比如grep,awk,sed等。
3.正則表達式的分類?
正則表達式的字符串按照表示方式依照不同的嚴謹度而分為基礎正則表達式和擴展正則表達式。
4.使用正則表達式需要特別注意的點?
使用正則表達式時,需要特別留意當時環境的語系為何,否則可能會發現結果可能和別人的不相同。echo $LANG:查看所處環境的語系。
grep在數據中查找一個字符串時,是以整行為單位來進行數據的選取。
5.基本正則表達式符號代表的含義:
特殊符號 代表的含義
[:alnum:] 所有的數字和字母,0-9,a-z,A-Z
[:alpha:] 所有的字母,a-z,A-Z
[:space:] 所有的空白字符,空格和TAB
[:digit:] 所有的數字,0-9
[:punct:] 所有的標點符號
[:lower:] 所有的小寫字母,a-z
[:upper:] 所有的大寫字母,A-Z
6.grep命令的基本用法:
grep:根據模式,搜索文本,并將符合模式的文本行顯示出來。
Pattern:由文本字符和正則表達式的元字符組合而成匹配條件
grep [OPTIONS] PATTERN [FILE…]
-i:表示忽略大小寫
–color:把查找到的字符,用顏色標識出來
-v:反向查找,顯示沒有被模式匹配到的行,匹配到的不顯示
-o:只顯示被模式匹配到的字符串
-E: 使用擴展正則表達式
-A #:顯示查找的文件的后#行,用–分開
-B #:顯示查找的文件的前#行,用–分開
-C #:顯示查找文件的前后各#行,用–分開
7.正則表達式:Regular EXPression :REGEXP
元字符:默認方式工作在貪婪模式下
.:表示匹配任意長度的任意字符
[]:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符
^[^]:^在[]的內外是由區別的,[^]表示的是反向選擇,^[]表示定位在行首的含義。
字符的匹配次數(貪婪模式):盡可能長的去匹配,有部分匹配也行
*:匹配其前面的字符任意次
eg:a,b,ab,aab,acb,adb,amnb
a*b:可以匹配的是:b,ab,aab(a出現任意次后面跟個b)
a.*b:可以匹配的是:ab,aab,acb,adb,amnb(a開頭b結束的任意長度的任意字符)
a\?b:b,ab(上面是全部符合的,剩下的有一部分是符合的)
.*:匹配任意長度的任意字符
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配器前面的字符至少是m次,至多是n次
a\{1,3\}b:可以匹配:ab,aab,只能匹配兩個條件都符合的
a.\{1,3\}b:可以匹配:aab,acb,adb,amnb(a和b中間的可以是一個兩個或者三個)
位置錨定
^:錨定行首(此字符后面的任意字符段必須出現在行首)
eg: grep '^root' /etc/passwd
表示在下面查找的內容中,root必須是在行首出現
$:錨定行尾(此字符前面的任意字符段必須出現在行尾)
eg: grep 'root$' /etc/passwd
表示在下面查找的內容中,root必須是在行尾出現
^$:空白行
\<或\b:錨定行首,其后面的任意字符必須作為單詞首部出現
\>或\b:錨定行尾,其后面的任意字符必須作為單詞尾部出現
\<root\>:整個的單詞出現
分組:
\(\)
\(ab\)*:ab可以出現一次兩次,任意次,修飾的是ab這個整體
后向引用
\1:引用第一個左括號以及與之對應的右括號所包括的所有內容
\(l..e\).*\1:后面查找的內容,必須和前面的內容一樣
擴展的正則表達式:工作在貪婪模式中
擴展正則表達式的花括號不用使用反斜線
字符匹配:
?:任意單個字符
[]:指定范圍內的單個字符
[^]:指定范圍外的單個字符
次數匹配:
*:匹配其前面的字符任意次
?: 匹配其前面的字符1次或0次
+:匹配其前字符至少1次
{m,n}:匹配器前面的字符至少是m次,至多是n次
分組:不需要加反斜線
():分組,真正的實現分組
\1,\2,\3,…
或者: | or
a|b:ab有一個就行啊
C|cat:只匹配單純的C|cat。
grep -E=egrep 用于擴展正則表達式的grep
錨定的數字,必須是單個的字符出現,小數點不會被識別
查找文件的基本演示:
a.正則表達式:
1.查找特定的字符串:(使用-n選項,默認顯示查找到的行的行號)
正向查找grep -n 'root' /etc/passwd
反向查找grep -vn 'root' /etc/passwd (除了含有root的兩個沒匹配,其余都匹配)
查找的字符不區分大小寫 grep -in 'Root' /etc/passwd
2.查找以特定字符開頭的字符串:
grep -n '^root' /etc/passwd :查找以root開頭的字符串
3.利用[]來查找集合字符
grep -n 'r[oa]ot' /etc/passwd :[]中無論幾個字符,都是代表一個字符,相當于查詢root raot
4.利用[]來查找連續字符的內容
grep ':[0-9]:' /etc/passwd : []中出現的范圍的單個字符
5.利用[^]來過來我們不想查找的內容
grep -n 'r[^o]ot' /etc/passwd :[^]不會去查找[^]中的內容
6.利用特殊符號來查找內容
grep -n '^[^[:lower:]].' /etc/passwd :查找/etc/passwd 下面以非小寫字母開頭的字符
grep -n '^[[:digit:]].' /etc/passwd :查找/etc/passwd 下面以數字開頭的字符
7.查找以特定字符結尾的字符串
grep -n 'bash$' /etc/passwd :查找以bash結尾的字符串
8.表示任意一個字符 .(表示一定有一個任意字符的意思)
grep -n 'r..t' /etc/passwd :表示查找到的字符中是以r開頭以t結尾,中間含有兩個字符,但不指定中間這兩個字符是什么
9.表示重復字符*(表示*前面的字符可以重復0次到無窮次)
grep -n 'ooo*' /etc/passwd :表示查找到的字符中最少含有oo,可以含有2-n個o字符
10.表示以特定字符開頭以特定字符結尾,中間含有任意個字符,為.*
grep -n 'r.*t' /etc/passwd :表示r和o中間可以有很多個字符,不限定是什么
11.表示限定連續多個字符范圍 {} (使用中{}需要轉義為\{\})
grep -n 'o\{2\}' /etc/passwd :表示查找的字符中含有僅含有兩個o
grep -n 'o\{1,3\}' /etc/passwd :表示查找的字符中含有1-3個o
需要轉義符特殊制定的符號:
.–>\. {}–>\{\}
b.擴展正則表達式:需使用grep -E 或者egrep 跟后面的正則表達式
1.表示查找一個以上的字符 +
egrep 'ro+t' /etc/passwd :查找文件中以ro+t的字符,o出現一次或者n次
2.表示前面出現零個或者一個前面的字符
egrep 'roo?t' /etc/passwd :查找文件中以roo?t的字符,第二個o出現一次或者零次 查找的結果為 rot root
3.表示用或的方式找出數個字符串
egrep 'raot|root|rot' /etc/passwd :查找文件中的raot|root|rot字符
4.查找“組”字符串
egrep 'r(a|o)ot' /etc/passwd :查找文件中root或raot 字符
5.查找多個重復組的判別 ()+
egrep 'r(ao)+t' /etc/passwd :查找文件中含有多個ao的字符
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/31290