正則表達式概述
是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。在很多文本編輯器或其他工具裏,正則表達式通常被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串操作。例如,在Perl中就內建了一個功能強大的正則表達式引擎。正則表達式這個概念最初是由Unix中的工具軟件(例如 sed和grep)普及開的。正則表達式通常縮寫成“regex”。
PCRE正則庫
(Perl Compatible Regular Expressions中文含義:perl語言兼容正則表達式)是一個用C語言編寫的正則表達式函數庫,由菲利普.海澤(Philip Hazel)編寫。PCRE是一個輕量級的函數庫,PCRE十分易用,同時功能也很強大,性能超過了POSIX正則表達式庫和一些經典的正則表達式庫
開啓pcre 或 posix正則表達式支持,常用的有這三個指令grep,sed,awk
1,grep –P =grep –E = egrep
2,sed –r
3,awk --posix
元字符
元字符 | 功能 | 示例 | 匹配對象 |
^ | 行首定位符 | '^love' | 匹配所有以love開關的行 |
$ | 行尾定位符 | 'love$' | 匹配所有以love結尾的行 |
[] | 匹配一組字符中的一個字符 | '[Ll]'ove | 匹配love或Love的行 |
[^] | 匹配不在一組字符中的一個字符 | '[^A-Z]ove' | 匹配一個不在A到Z之間的字符,並且該字符緊跟着是ove的行 |
. | 匹配一個字符 | 'l..e' | 匹配包含一個l,後跟兩個字符,再跟一個e的行 |
x{m} | 字符x的重複m次 | 'o{5}' | 匹配連續出現5個o的行 |
x{m,} | 字符x至少重複m次 | 'o{5,}' | 匹配連續出現至少5個o的行 |
x{m,n} | 字符x至少m次,但不能超過n次 | 'o{5,10}' | 匹配連續出現至少5個o,但不能超過10個o的行 |
aa|bb | 匹配aa或bb | love|hate | 匹配love或hate這兩個字符串之一 |
() | 字符組 | love(able|ly)(ov){1,} | 匹配loveable或lovely並且緊跟在其後ov的一次或多次出現. 並且將()中的內容放在寄存器中最左側第一個叫做\1,後續再引用這個存在器中的內容可以使用\1,最多可以用9個寄存器\1 \2 ….\9. |
* | 匹配零個或多個前一個字符 | ' *love' | 匹配包含零個或多個空格後有love的行 |
練習素材
[work@3server shell]$ cat datafile.txt
northwest NW Charles Main 3.0 .98 3 34
western WE Sharon Gray 5.3 .97 5 23
southwest SW Lewis Dalsass 2.7 .8 2 18
southern SO Suan Chin 5.1 .95 4 15
southeast SE Patricia Hemenway 4.0 .7 4 17
eastern EA TB Savage 4.4 .84 5 20
northeast NE AM Main Jr. 5.1 94 3 13
north NO Margot Weber 4.5 .89 5 9
central CT Ann Stephens 5.7 .94 5 13
正則表達式練習
範例1
範例2
範例3
範例4
範例5
範例6
範例7
範例8
範例9
範例10
範例11
範例13
範例14
範例15
範例16
範例17
範例18
範例20 (這個例子先了解一下即可,後續再學sed,awk)