shell正则表达式


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

正则表达式介绍

正则表达式,也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。
许多程序设计语言都支持利用正则表达式进行字符串操作。

  • 支持正则表达式的程序如:locate |find| vim| grep| sed |awk
  • 正则表达式是一个三方产品,被常用计算机语言广泛使用,比如:shell、PHP、python、java、js等!

正则表达式特殊字符

  • 定位符使用技巧:同时锚定开头和结尾,做精确匹配;单一锚定开头或结尾或者不锚定的,做模糊匹配。
    在这里插入图片描述
  • 测试案例

1)精确匹配 以a开头c结尾的字符串
在这里插入图片描述
2)模糊匹配 以a开头
在这里插入图片描述3)模糊匹配 以c结尾的字符串
在这里插入图片描述

  • 匹配符:匹配字符串
    在这里插入图片描述
  • 测试案例

1)精确匹配 以a开头c结尾 中间任意 长度为三个字节的字符串
在这里插入图片描述
2)模糊匹配 以cc结尾的字符串 因为$只能锚定单个字符,如果是一个字符串就需要用()来做定义
在这里插入图片描述
3)精确匹配 以a开头c结尾 中间是a-z,0-9 长度为三个字节的字符串
在这里插入图片描述
4)精确匹配 以a开头c结尾 中间不包含a-z,0-9 长度为三个字节的字符串
在这里插入图片描述
5)精确匹配 以e开头f结尾 中间是号 长度为三个字节的字符串 ef
在这里插入图片描述
6)精确匹配 以a开头b或c结尾 中间是任意 长度为三个字节的字符串
在这里插入图片描述

  • 限定符:对前面的字符或者(字符串)出现的次数做限定说明
    在这里插入图片描述
  • 测试案例

1)精确匹配 以a开头 c结尾 中间是有b或者没有b 长度不限的字符串
在这里插入图片描述
2)精确匹配 以a开头 c结尾 中间只出现一次b或者没有b的字符串
在这里插入图片描述
3)精确匹配 以a开头 c结尾 中间是有b且至少出现一次 长度不限的字符串
在这里插入图片描述
4)精确匹配 以a开头 c结尾 中间是有b且至少出现两次最多出现四次 长度不限的字符串
在这里插入图片描述
5)精确匹配 以a开头 c结尾 中间是有b且正好出现三次的字符串
在这里插入图片描述
6) 精确匹配 以a开头 c结尾 中间是有b且至少出现一次的字符串
在这里插入图片描述

正则表达式POSIX字符

posix字符一次只匹配一个范围中的一个字节
在这里插入图片描述

  • 测试案例

注意[[ ]] 双中括号的意思: 第一个中括号是匹配符[] 匹配中括号中的任意一个字符,第二个[]是格式 如[:digit:]

1)精确匹配 以a开头c结尾 中间a-zA-Z0-9任意字符 长度为三个字节的字符串
在这里插入图片描述

2)精确匹配 以a开头c结尾 中间是a-zA-Z任意字符 长度为三个字节的字符串
在这里插入图片描述

3)精确匹配 以a开头c结尾 中间是0-9任意字符 长度为三个字节的字符串
在这里插入图片描述

4)精确匹配 以a开头c结尾 中间是a-z任意字符 长度为三个字节的字符串
在这里插入图片描述

4)精确匹配 以a开头c结尾 中间是A-Z任意字符 长度为三个字节的字符串
在这里插入图片描述

5)精确匹配 以a开头c结尾 中间是非空任意字符 长度为三个字节的字符串
在这里插入图片描述

6)精确匹配 以a开头c结尾 中间是符号字符 长度为三个字节的字符串
在这里插入图片描述

7)精确匹配 以a开头c结尾 中间是空格或者TAB符字符 长度为三个字节的字符串
在这里插入图片描述

8)精确匹配 以a开头c结尾 中间是十六进制字符 长度为三个字节的字符串
在这里插入图片描述

  • 匹配正确的的IP地址:
    egrep ‘^((25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?).){3}(25[0-5]|2[0-4][[:digit:]]|[01]?[[:digit:]][[:digit:]]?)$’ --color ip_base
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式1、 掌握正则表达式的基本用法 1.2. 正则表达式简介 1、 正则表达式是一个强大的字符串处理工具,可以对字符串进行、查找、提取、分割、替换等操作。它简单而且实用,是一个用于匹配字符串的模板,我们定义的任意的一个字符串都可以看成是一个正则表达式。 2、 String类也提供了几个和正则表达式有关的几个特殊方法 1) Boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。 2) String replaceAll(String regex,String replacement):返回该字符串中所有匹配正则表达式的子串,然后替换成replacement指定的字符串。 3) String replaceFirst(String regex,String replacement);返回该字符串中第一个匹配正则表达式的子串替换成replacement 后的新字符串。 4) String[] split(String regex)根据给定正则表达式拆分该字符串后得到的字符串数组。 3、 创建正则表达式正则表达式中使用的常见字符: 1) \t:制表符(‘\u0009’). 2) \n:换行(‘\u000A’)。 3) \r:回车(‘\u000d’) 4) …… 除此之外正则表达式中有一些特殊的字符,这些字符在正则表达式中有特殊的用途,如前面介绍的反斜线(\),如果需要匹配这些字符,必须首先将这些字符转义,也就是再前面添加一个反斜线(\).正则表达式中的特殊字符: 1)$:匹配一行的结尾。要匹配$自身用\$ 2)^:匹配一行的开头。要匹配^字符本身用\^. 3)():标记子表达式的开始位置和结束位置,要匹配这些字符用\(,\). 4)[]:确定中括号表达式的开始位置和结束位置。 例如:字符集 [abc]:表示内容可能是a、b、c字母中的任意一个。 [^abc]:表示内容不是a、b、c字母的任意一个 [a-zA-Z]:全部的英文字母 [0-9]:全部的数字 5){}:用于标记字表达式的出现额度。 {n}:出现正好n次。 {n,m}:出现n~m次 {n,}:出现n次以上。 6)*:指定前面表达式可以出现零次或多次。 7)+:指定前面表达式可以出现一次或多次。 8)?: 指定前面表达式可以出现零次或1次。 9).:匹配换行符\n之外的任何字符。 10)\:用于转义下一个字符 11)|:指定两项之间任选一项,如果要匹配|,请使用\| 上面的正则表达式依然匹配单个字符,这是因为还未在正则表达式中使用”通配符”,“通配符”是可以匹配多个字符的特殊字符。正则表达式中”通配符”远远超出了普通通配符的功能,它们被称为预定义字符:例如 1).:可以匹配任何字符 2)\d:匹配数字 3)\D:匹配非数字 4)\s:匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等 5)\S:匹配所有非空白字符 6)\w:匹配所有单词字符,包括0~9所有数字,26个英文字母和下划线(_) 7)\W:匹配所有非单词字符。 说明:上面的预定义字符:d是digit的意思,代表数字;s是space的意思,代表空白;w是word的意思,代表单词。d、s、w的大写形式恰好匹配与之相反的字符。 例如 :c\wt 可以匹配cat,cbt,c0t,c9t等 \d\d\d-\d\d\d\-\d\d\d可以匹配000-000-000形式的电话号码。 \\d{3}-\\d{3}-\\d{3} 正则表达式还支持圆括号表达式,圆括号表达式用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符(|),例如正则表达式 “(public|protected|private)”用于匹配Java三个访问控制符其中之一。 4、 使用正则表达式 一旦程序中定义了正则表达式之后,就可以使用Pattern和Matcher来使用正则表达式。 Pattern对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象,执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。 例如:典型的调用顺序 //将一个字符串编译成Pattern对象 Pattern p=Pattern.complie(“a*b”); //使用Pattern对象创建Matcher对象 Matcher m=p.matcher(“aaaab”); Boolean b=m.matchers();//返回true. 上面的Pattern对象可以重复使用多次,如果某个正则表达式仅需一次使用,可直接使用Pattern类的静态matches方法,此方法自动把指定字符串编译成匿名的Pattern对象,并执行匹配。 Boolean b=Pattern.matches(“a*b”,”aaaab”);//返回true. 5、

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值