设为首页 收藏本站
查看: 769|回复: 0

Shell下的正则表达式及实例

[复制链接]

尚未签到

发表于 2018-8-30 07:07:43 | 显示全部楼层 |阅读模式
  一、正则表达式简述
  ·概念:用一串字符,描述有共同属性的数据
  ·注意:使用正则表达式匹配时,一定要注意 \ 转移符号的使用
  ·格式:
  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 "\"
  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
  如有出错,请帮忙指出 DSC0000.gif


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558610-1-1.html 上篇帖子: shell if 条件判断的命令 下篇帖子: 每天一条shell-tonylinux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表