每天30分钟吊打Linux常用命令专题:正则表达式

Linux正则表达式学习总结

基础知识

BRE模式
  1. 纯文本匹配
    从日志文件中查询Spring Boot启动端口,假设日志文件为nohup.log,可以使用一下命令进行匹配。
   sed -n '/port(s)/p' nohup.out
   cat nohup.out | grep "port(s)"  # 此时输出的结果会标红,建议使用此方式
  1. 特殊字符
    Linux正则表达式中主要的核心特殊字符为:.*[]^${}\+?|(),当需要匹配的字符串中包括这些字符需要对字符进行转义。
	echo "hello\fhdkajf" | grep '\\'
    echo "hello\fhdkajf"  | sed -n '/\\/p' # 此处sed可以修改为awk命令
  1. 锚字符
    正则表达式的锚点主要包括^$两个字符,$可以匹配字符出现在行尾,^匹配字符出现在行首。
    echo "hello\fhdkajf" | grep "^hello"  # 可以匹配出
    echo "hello\fhdkajf" | grep "^hello$" # 匹配行数据为hello的行,返回空
  1. 点号字符
    .点号字符标识一个除换行符以外的任意一个字符。.点号位置必须包含一个字符,如果不占一个字符则直接返回空,匹配不上
 	echo "hello\fhdkajf" | grep "^h.llo"
    ## 打印 hello\fhdkajf
    echo "heello\fhdkajf" | grep "^h.llo"  # 输出为空
    echo "hllo\fhdkajf"   | grep "^h.llo"  # 输出为空
  1. 字符组
    []字符组是限定每一位置的字符是在字符组内的字符,使用中括号表示其中的值,举例如下:
   echo "hallo\fhdkajf" | grep "^h[ae]llo"  # 此时只能匹配一个字符
  1. 字符组排除(^)
  echo "hallo\fhdkajf" | grep "^h[^ae]llo" # 排除第二个字符为a和e
  echo "hqllo\fhdkajf" | grep "^h[^ae]llo" # 输出 hqllo\fhdkajf
  1. 区间([?-?]) 闭区间
   echo "hqllo\fhdkajf" | grep "^[h-q]qllo" # hqllo\fhdkajf
   echo "qllo\fhdkajf" | grep "^[h-q]llo"   # qllo\fhdkajf
  1. 特殊字符组
    Regex正则表达式中包括一些特殊的字符组简写,可以描述部分字符组,如下列举了所有的特殊的字符组:
字符组描述
[[:alpha:]]匹配任意字母字符,包括A-Z和a-z
[[:alnum:]]匹配任意字母字符和数字,包括A-Z和a-z和0-9
[[:blank:]]匹配空格和制表符
[[:space:]]匹配任意空白字符:空格、制表符、NL、FF、VT和CR
[[:upper:]]匹配任意大写字母,A-Z
[[:lower:]]匹配任意小写字母,a-z
[[:digit:]]匹配任意数字,0-9
[[:print:]]匹配任意可打印字符
[[:punct:]]匹配标点符号
  1. 星号
    字符后面放置星号表明该字符必须在匹配模式的文本中出现0次或多次
     echo "qllo\fhdkajf" | grep "^ql*"  # qllo\fhdkajf # l出现了0次或多次
扩展正则表达式
  1. 问号?
    字符可以出现0次或1次。
	echo "bet" | awk -n '/be?t/p'
  1. 加号+
    字符出现至少1次。
    echo "bet" | awk -n '/be+t/p'
  1. 花括号(设定上下限){n,m}
    默认情况下,gawk程序不会识别正则表达式间隔。必须指定gawk程序的–re- interval命令行选项才能识别正则表达式间隔。
   echo "beet" | gawk --re-interval '/be{1,2}t/{print $0}' # beet
   echo "bet"  | awk  --re-interval -n '/be{3,4}t/{print $0}' # 空
   echo "bet" | awk --re-interval -n '/be{0,3}t/'  # bet
   echo "bet" | awk --re-interval -n '/be{2,3}t/'  # 空
  1. 管道符号(| 或的关系)
    echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
  1. 表达式分组()
    echo "He has a hat." | gawk '/[ch]at|dog/{print $0}'

* . ? +之间的比较总结

字符意义条件类型
*匹配行中的字符出现0次或多次字符出现0次或n次
.匹配除换行符意外的任意一个字符,有且仅有一个充分必要条件
?匹配字符串出现0次或一次必要条件
+匹配字符至少出现一次充分必要条件

正则表达式实战(自己可以试试看呦,不要眼高手低)

  • 目录可执行文件计数
  • 验证电话号码格式
  • 解析邮件地址

小结

注意事项:

  • gawk程序可以使用大多数扩展正则表达式模式符号,并且能提供一些额外过滤功能,而这些功能都是sed编辑器所不具备的。但正因为如此,gawk程序在处理数据流时通常才比较慢.同时grep也不支持
  • 正则表达式是区分大小写的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值