linux學習-正則表達式基礎
點符號用於匹配除換行符之外的任意一個字符。例如:r.t可以匹配rot rut,但是不能匹配root,若使用r..t就可以匹配root、ruut、r t(中間是兩個空格)等。下面的例子是從/etc/passwd中搜索出“包含r,緊跟著兩個字符,後面在接t”的行。
grep ‘r..t‘ /etc/passwd
“”符號
“”符號用於匹配前一個字符0次或者任意多次,比如ab,可以匹配a,ab,abb等。“”符號經常和“.”符號在一起使用。比如“.”代表任意長度的不包含換行的字符。下面的例子是試圖找到連續的r字母緊跟著字母t的行。由於在/etc/passwd中沒有rt,rrt這樣的匹配,所以該表達式實際上只找出了包含t的行(r匹配了0次)
grep ‘r..t‘ /etc/passwd
如果把上面的‘rt’換成‘r.t’,代表查找包含字母r,後面緊跟任意長度的字符,再跟一個字母t的行。如下所示:
grep ‘r.*t‘ /etc/passwd
“\{n,m\}”符號
雖然“”可用於重復匹配前一個字符,但卻不能精確地控制匹配的重復次數,使用“{n,m}”符號則能更加靈活地控制字符重復的次數:
\{n,\} 匹配前面的字符n次,下列匹配的是包含root的行(r和t包含兩個o)
grep ‘r.*t‘ /etc/passwd
{n,} 匹配前面的字符至少n次以上(含n次)
grep ‘ro\{0,\}t‘ /etc/passwd
“^”符號
匹配開頭的字符,例如“^root”匹配的是以字母root開始的行grep ‘^root‘ /etc/passwd
“$”符號
此符號用於匹配尾部,例如“abc$”代表以abc結尾的行。如果是"^$"則代表為空,因為^和$之間什麽都沒有。下面匹配的是以r開頭,中間有一串任意字符,以h結尾的行。
grep ‘^r.*h$‘ /etc/passwd
“[]”符號
用於匹配方括號內出現的任一字符。比如單項選擇題的答案,可能是A,B,C,D選項的任一種,用正則表達式就是[ADCD]。如果遇到比較大範圍的匹配,比如說要是匹配任意一個大寫字母,就需要使用“-”號做範圍限定,寫成[A-Z],要匹配所有的字母則寫成[A-Za-z]
"\<"和“\>”
這兩個符號分別用於界定單詞的左邊界和右邊界。比如“\<hello”用於匹配hello開頭的單詞,而“hello\>”用於匹配hello結尾的單子。可以使用“\<hello\>”精確匹配hello這個單詞
“\d”
匹配一個數字,等價於[0-9]
其他符號說明
\b 匹配單詞的邊界
\B 匹配非單詞的邊界
\w 匹配字母、數字和下劃線,等價於[A-Za-z0-9]
\W匹配非字母、非數字、非下劃線等價於[^A-Za-z0-9]
\n 匹配換行符
\r 匹配回車符
\t 匹配制表符
\f 匹配換頁符
\s 匹配任何空白字符
\S 匹配任何非空白字符
linux學習-正則表達式基礎