天天看點

正規表達式

<a> 正規表達式</a>

     工作中公司需要對外招聘人才,但大千世界人才衆多并不一定每個都适合你,這時我們可以有很多方法找到你需要的人。常用的方式有兩種,第一,通過朋友介紹直接精準的定位到人;第二,寫招聘簡章(對需要的人才僅需描述:學曆、經驗、技能、語言等等),寫完後通過招聘會、網絡招聘等方式廣納人才 ,通常描述寫的越細越能快速精準的定位所需人才。

    而正規表達式是一種計算機描述語言,你可以直接告訴計算機你需要的是字母A來精确比對定位,也可以告訴計算機你需要的是26個字母中的任意一個比對,等等。現在很多程式、文本編輯工具、程式設計語言都支援正規表達式,但任何語言都需要遵循一定的文法規則,正規表達式也不例外,正規表達式的發展經曆了基本正規表達式與擴充正規表達式,擴充正規表達式是在基本正規表達式的基礎上添加了一些更加豐富的比對規則而成。在Linux世界中有句古老的語言“Everything is a file(一切皆檔案)”,而且很多配置檔案是純文字檔案,工作中我們時常需要對大量的伺服器進行配置的修改,如果以手動的方式在海量資料中進行查找比對并最終完成修改,此時,使用正規表達式是非常明智的選擇。接下來,我們分别看看每種表達式的具體規則。由于不同的工具對正則的支援有所不同,表3-3列舉了系統常用編輯工具與正規表達式的對應關系。

注意正規表達式有些比對字元與Shell中的通配符符号一樣,但含義卻不同。注意正規表達式有些比對字元與Shell中的通配符符号一樣,但含義卻不同。

                   表1-1 

編輯工具

基本正規表達式

擴充正規表達式

grep

egrep

vi

sed

awk

表1-2列出了基本正規表達式及其對應的含義。

                         表1-2

      字元

含義

c

比對字母c

.

比對任意單個字元

*

比對前一個字元出現零次或多次

.*

比對任意字元

[]

比對集合中的任意單個字元,括号中為一個集合

[x-y]

比對連續的字串範圍

^

比對字串的開頭

$

比對字串的結尾

[^]

比對否定,對括号中的集合取反

\

比對轉義後的字串

\{n,m\}

比對前一個字元重複n到m次

\{n,\}

比對前一個字元重複至少n次

\{n\}

比對前一個字元重複n次

\(\)

将\(與\)之間的内容存儲在“保留白間”,最大存儲9個

\n

通過\1至\9調用保留白間中的内容

2. 基本正規表達式案例

   提示:由于模版檔案的内容在每個系統略有差異,以下案例的輸出結果可能有所不同。

[root@centos6 ~]# cp /etc/passwd /tmp/           #複制模版檔案 

查找包含root的行: 

[root@centos6 ~]# grep root /tmp/passwd                           

root:x:0:0:root:/root:/bin/bash 

operator:x:11:0:operator:/root:/sbin/nologin 

查找:與0:之間包含任意兩個字元的字串,并顯示該行(--color代表以顔色加亮顯示比對的内容):

[root@centos6 ~]# grep --color :..0: /tmp/passwd 

sync:x:5:0:sync:/sbin:/bin/sync 

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 

halt:x:7:0:halt:/sbin:/sbin/halt 

games:x:12:100:games:/usr/games:/sbin/nologin 

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin 

查找包含至少一個0的行(第一個0必須出現,第二個0可以出現0次或多次):

(由于輸出内容較多案例中僅為部分輸出)

[root@centos6 ~]# grep --color 00* /tmp/passwd       

root:x:0:0:root:/root:/bin/bash                                        #該行有兩處比對 

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin 

games:x:12:100:games:/usr/games:/sbin/nologin       #比對0出現2次 

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin 

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 

avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin 

查找包含oot或ost的行: 

[root@centos6 ~]# grep --color  o[os]t /tmp/passwd 

postfix:x:89:89::/var/spool/postfix:/sbin/nologin 

查找包含0-9數字的行: 

[root@centos6 ~]# grep –color [0-9] /tmp/passwd 

bin:x:1:1:bin:/bin:/sbin/nologin 

daemon:x:2:2:daemon:/sbin:/sbin/nologin 

查找包含f-q字母的行: 

[root@centos6 ~]# grep --color  [f-q] /tmp/passwd 

查找以root開頭的行: 

[root@centos6 ~]# grep --color ^root /tmp/passwd 

查找以bash結尾的行: 

[root@centos6 ~]# grep --color bash$ /tmp/passwd 

查找sbin/後面不跟n的行: 

[root@centos6 ~]# grep --color sbin/[^n] /tmp/passwd 

查找數字0出現1次2次的行: 

[root@centos6 ~]# grep --color '0\{1,2\}' /tmp/passwd 

查找包含兩個root的行(注意,grep在使用\(\)過濾時,比對條件必須使用引号): 

[root@centos6 test]# grep --color "\(root\).*\1" /tmp/passwd 

查找包含root:開頭:root結尾的字串行: 

[root@centos6 test]# grep --color "\(root\)\(:\).*\2\1" /tmp/passwd 

過濾檔案的空白行: 

[root@centos6 test]# grep ^$ /tmp/passwd 

過濾檔案的非空白行: 

[root@centos6 test]# grep -v ^$ /tmp/passwd 

1. 表1-3列出了擴充正規表達式及其對應的含義。

                                       表1-3

字元

{n,m}

等同于基本正規表達式的\{n,m\}

+

比對前一個字元出現一次或多次

?

比對前一個字元出現零次或一次

|

比對邏輯或者,即比對|前或後的字串

()

比對正則集合

2.擴充正規表達式案例

由于輸出資訊與基本正規表達式類似,這裡僅寫出指令而不再列印輸出資訊。

查找數字0出現1次2次的行:

[root@centos6 ~]# egrep --color '0\{1,2\}' /tmp/passwd 

查找包含至少一個0的行: 

[root@centos6 ~]# egrep --color ‘0+’ /tmp/passwd 

查找包含root或者admin的行: 

[root@centos6 ~]# egrep --color ‘(root|admin)’ /tmp/passwd 

 丁丁曆險http://manual.blog.51cto.com/3300438/1135296

本文轉自丁丁曆險51CTO部落格,原文連結: http://blog.51cto.com/manual/1135296,如需轉載請自行聯系原作者