码迷,mamicode.com
首页 > 其他好文 > 详细

Shell下的正则表达式

时间:2014-07-17 08:02:43      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:shell   正则表达式   

一、正则表达式简述

·概念:用一串字符,描述有共同属性的数据

·注意:使用正则表达式匹配时,一定要注意 \ 转移符号的使用

·格式:

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



如有出错,请帮忙指出bubuko.com,布布扣



本文出自 “ywcto” 博客,请务必保留此出处http://nmore.blog.51cto.com/9008175/1439067

Shell下的正则表达式,布布扣,bubuko.com

Shell下的正则表达式

标签:shell   正则表达式   

原文地址:http://nmore.blog.51cto.com/9008175/1439067

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!