一、正则表达式简述
·概念:用一串字符,描述有共同属性的数据
·注意:使用正则表达式匹配时,一定要注意 \ 转移符号的使用
·格式:
a、 grep [选项] ‘正则表达式’ 文件列表1 文件列表2
b、 | 管道命令
·处理方式
a、以行为处理单位
b、默认输出与正则表达式匹配的行刀屏幕上
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
?!_-
三、元字符
·元字符(正则符号):正则表达式由一个或多个元字符组成
·元字符分类:字符匹配、次数匹配、位置锚定、分组等
→ ^ #行首匹配
→ $ #行尾匹配
→ ^$ #空行匹配
→ . #匹配任意单个字符(换行符 \n 除外)
.$ #匹配以任意字符结尾的行
^.$ #匹配由任意一个字符结尾的行
^x.y$ #匹配含有x.y的行,这里 . 代表任意字符
\.$ #匹配以字符 . 结尾的行
# cat text | grep ‘^do‘
dota
# grep ‘34$‘ text
1234
abcd1234
# cat text | grep ‘w.t‘
thank you for watching
·设置正则表达式的匹配次数、格式
→ * #匹配前面正则表达式,出现零次或多次
→ ? #匹配前面正则表达式,出现零次或一次
→ + #匹配前面正则表达式,出现一次或多次
→ () #把表达式作为整体来匹配
→ {n,m} #指点前面正则表达式,匹配次数的范围
{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
abc@163.com
·匹配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
本文出自 “ywcto” 博客,请务必保留此出处http://nmore.blog.51cto.com/9008175/1439067
原文地址:http://nmore.blog.51cto.com/9008175/1439067