前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >shell 文本三剑客之正则表达式

shell 文本三剑客之正则表达式

原创
作者头像
小唐同学.
修改2022-02-19 09:21:35
修改2022-02-19 09:21:35
1.8K0
举报
文章被收录于专栏:CMS建站教程CMS建站教程

处理海量日志对每一个运维来说都非常的头疼,日志分析我们首先需要把需要的数据从海量的日志中匹配出来,降低数据量,然后在分析这些日志。那么从海量的日志中把我们需要的日志找出来就需要我们写一个公式来匹配,那么如何才能写一个这样的公式呢?

这节课我就给大家说说正则表达式,看起来比较高大上,其实就是通过给定的符号生成一个字符串匹配的公式,通过该公式把需要的数据匹配出来。

比如

  • 匹配正确的IP地址
  • 匹配正确的e-mail地址

正则表达式

1、正则表达式介绍

正则表达式 (Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

许多程序设计语言都支持利用正则表达式进行字符串操作 。例如,在Perl中就内建了一个功能强大的正则表达式引擎。

正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

支持正则表达式的程序如:locate |find| vim| grep| sed |awk

正则表达式是一个三方产品,被常用计算机语言广泛使用,比如:shell、PHP、python、java、js等!

代码语言:SHELL
复制
[root@manage01 ~]# locate sko

locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录



使用updatedb生成数据文件

[root@manage01 ~]# updatedb

2、正则表达式特殊字符

定位符使用技巧:同时锚定开头和结尾,做精确匹配;单一锚定开头或结尾或者不锚定的,做模糊匹配。

定位符

说明

^

锚定开头 ^a 以a开头 默认锚定一个字符

$

锚定结尾 a$ 以a结尾 默认锚定一个字符

测试案例

代码语言:SHELL
复制
1)精确匹配  以a开头c结尾的字符串
[root@zutuanxue ~]# egrep "^ac$" file 
ac

2)模糊匹配  以a开头
[root@zutuanxue ~]# egrep "^a" file 
ac
ab
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
asb
aa
a_c
aZc
aAAAAc
a c
abababab
a3c


3)模糊匹配 以c结尾的字符串
[root@zutuanxue ~]# egrep "c$" file 
ac
abbc
abcc
aabbcc
abbbc
abbbbbc
acc
abc
a_c
aZc
aAAAAc
a c
ccc
a3c

匹配符:匹配字符串

image.png
image.png

测试案例

代码语言:txt
复制
1)精确匹配  以a开头c结尾  中间任意  长度为三个字节的字符串
[root@zutuanxue ~]# egrep "^a.c$" file 
acc
abc
a_c
aZc
a c
a3c

2)模糊匹配  以cc结尾的字符串   因为$只能锚定单个字符,如果是一个字符串就需要用()来做定义
[root@zutuanxue ~]# egrep "(cc)$" file 
abcc
aabbcc
acc
ccc

3)精确匹配  以a开头c结尾  中间是a-z,0-9  长度为三个字节的字符串
[root@zutuanxue ~]# egrep "^a[a-z0-9]c$" file 
acc
abc
a3c

4)精确匹配  以a开头c结尾  中间不包含a-z,0-9  长度为三个字节的字符串
[root@zutuanxue ~]# egrep "^a[^a-z0-9]c$" file 
a_c
aZc
a c

5)精确匹配  以e开头f结尾  中间是*号  长度为三个字节的字符串  e*f
[root@zutuanxue ~]# egrep "^e\*f$" file 
e*f

6)精确匹配 以a开头b或c结尾  中间是任意  长度为三个字节的字符串
[root@zutuanxue ~]# egrep "^a.(b|c)$" file 
acc
abc
asb
a_c
aZc
a c
a3c

限定符:对前面的字符或者(字符串)出现的次数做限定说明

限定符

说明

*

某个字符之后加星号表示该字符不出现或出现多次 a* (ab)*

与星号相似,但略有变化,表示该字符出现一次或不出现

+

与星号相似,表示其前面字符出现一次或多次,但必须出现一次

{n,m}

某个字符之后出现,表示该字符最少n次,最多m次

{m}

正好出现了m次

代码语言:txt
复制
1)精确匹配 以a开头 c结尾 中间是有b或者没有b 长度不限的字符串
[root@zutuanxue ~]# egrep "^ab*c$" file 
ac
abbc
abbbc
abbbbbc
abc

2)精确匹配 以a开头 c结尾 中间只出现一次b或者没有b的字符串
[root@zutuanxue ~]# egrep "^ab?c$" file 
ac
abc

3)精确匹配 以a开头 c结尾 中间是有b且至少出现一次 长度不限的字符串
[root@zutuanxue ~]# egrep "^ab+c$" file 
abbc
abbbc
abbbbbc
abc

4)精确匹配 以a开头 c结尾 中间是有b且至少出现两次最多出现四次 长度不限的字符串
[root@zutuanxue ~]# egrep "^ab{2,4}c$" file 
abbc
abbbc

5)精确匹配 以a开头 c结尾 中间是有b且正好出现三次的字符串
[root@zutuanxue ~]# egrep "^ab{3}c$" file 
abbbc

6) 精确匹配 以a开头 c结尾 中间是有b且至少出现一次的字符串
[root@zutuanxue ~]# egrep "^ab{1,}c$" file 
abbc
abbbc
abbbbbc
abc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式
    • 1、正则表达式介绍
    • 2、正则表达式特殊字符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档