標籤: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