Shell下的Regex

來源:互聯網
上載者:User

標籤:shell   Regex   

一、Regex簡述

·概念:用一串字元,描述有共同屬性的資料

·注意:使用Regex匹配時,一定要注意 \ 轉移符號的使用

·格式:

a、    grep [選項]  ‘Regex’  檔案清單1 檔案清單2

b、    | 管道命令


·處理方式

a、以行為處理單位

b、預設輸出與Regex匹配的行刀螢幕上

c、對資料進行逐行處理,處理完當前行,自動處理下一行,直到結束


·選項

    → --color    高亮顯示匹配的資料

    → -q         不顯示匹配的結果

    → -c         統計符合匹配的行的行數

    → -v         取反匹配

    → -n         顯示符合匹配的行的行號

    → -i         匹配時忽略字母大小寫

    → -E         擴充匹配,或使用egrep

    → [ ]        範圍內匹配,匹配範圍內的任意一個字元,可以使用連字號“-”


二、匹配執行個體

·匹配字母:

    → [dota]     #匹配 d 或 o 或 t 或 a

    → [a-z]      #匹配 a 到 z 中的任意一個字元即可,[A-Z]同理

    → [a-Z]      #匹配所有字母


·匹配數字

    → [139]      #匹配 1 或 3 或 9

    → [0-9]      #匹配所有數字

    → [a-Z0-9]   #匹配所有數字和字母


·匹配符號

    → [?!_-]     #不要把符號“-”寫在其他字元之間,否則會將其當做連字號,而不進行匹配

    → \<         #匹配單詞開頭

    → \>         #匹配單詞結尾


# cat text        #自己編一個文本,這裡簡單舉幾個例子,用 | 管道或直接用grep都可以

dota

abcd

ABCD

1234

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching


# cat text | grep dota

dota


# cat text | grep [dota]

dota

abcd

abcd1234

a1b2c3d4

thank you for watching


# grep [a-Z] text

dota

abcd

ABCD

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching


# grep "\<th" text

thank you for watching


# cat text | grep "ing\>"

thank you for watching


# cat text | grep [-]

?!_-


# cat text | grep -E ‘dota|1234‘

dota

1234

abcd1234


# grep -E ‘dota|^1234$‘ text

dota

1234


·匹配範圍

    → ^[0-9]     #匹配數字開頭的行

    → [^0-9]     #取反匹配行,^在[]中表示‘反向選擇’



# cat text | grep ^[0-9]

1234

1A2B3C4D


#這裡仍然會匹配到含有數位行,是因為匹配到的行都含有非數位字元,所以仍會匹配到

# cat text | grep [^0-9]    

dota

abcd

ABCD

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching

?!_-


#這裡與[^0-9]匹配同理

# grep [^a-z] text

ABCD

1234

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching

?!_-


# cat text | grep [^A-Z]

dota

abcd

1234

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching

?!_-


# cat text | grep [^a-Z]

1234

abcd1234

a1b2c3d4

1A2B3C4D

thank you for watching

?!_-


三、元字元

·元字元(正則符號):Regex由一個或多個元字元組成

·元字元分類:字元匹配、次數匹配、位置錨定、分組等

    →     #行首匹配

    → $     #行尾匹配

    → ^$    #空行匹配

    → .     #匹配任意單個字元(分行符號 \n 除外)

        .$        #匹配以任一字元結尾的行

        ^.$       #匹配由任意一個字元結尾的行

        ^x.y$     #匹配含有x.y的行,這裡 . 代表任一字元

        \.$       #匹配以字元 . 結尾的行


# cat text | grep ‘^do‘

dota


# grep ‘34$‘ text

1234

abcd1234


# cat text | grep ‘w.t‘

thank you for watching


·設定Regex的匹配次數、格式

    → *     #匹配前面Regex,出現零次或多次

    → ?     #匹配前面Regex,出現零次或一次

    → +     #匹配前面Regex,出現一次或多次

    → ()    #把運算式作為整體來匹配

    → {n,m} #指點前面Regex,匹配次數的範圍

        {n,} #匹配次數大於等於 n 次

        {,m} #匹配次數小於等於 m 次

        {x}  #匹配次數等於 x 次


# cat repetition 

abc

abcabc

abcabcabc


# grep "\(abc\)\{1\}" repetition 

abc

abcabc

abcabcabc


# grep "\(abc\)\{3\}" repetition 

abcabcabc


# grep "\(abc\)\{2,3\}" repetition 

abcabc

abcabcabc


# grep "\(abc\)\{2,\}" repetition 

abcabc

abcabcabc


幾個實用的例子

·匹配郵箱地址

# grep "[a-Z0-9_]\{1,15\}@[a-Z0-9]\{1,20\}\(\.com\)\|\(\.cn\)"  1.txt

[email protected]


·匹配IP地址

# grep "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" /etc/sysconfig/network-scripts/ifcfg-eth0 

IPADDR=172.16.8.8

NETMASK=255.255.255.0

GATEWAY=172.16.8.1

DNS1=192.168.8.1


·匹配MAC地址

# grep "\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}" /etc/sysconfig/network-scripts/ifcfg-eth0 

HWADDR=00:0c:29:40:74:d7



如有出錯,請幫忙指出650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0066.gif" alt="j_0066.gif" />



本文出自 “ywcto” 部落格,請務必保留此出處http://nmore.blog.51cto.com/9008175/1439067

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.