Linux系统——正则表达式
有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息
1.使用提取命令(cut、awk、sed)提取出ip地址的那一列
2.使用sort按数字排序,将相同的地址整合到一起
3.使用uniq -c统计出数量
4.使用sort 数字 数字倒序排序
5.最后用head 取前十
一、正则表达式
搜索字符的方式
- 精确搜索
- 正则表达式搜索
- 元字符:预定好的具有特殊含义的符号,这些符号能够进行通配
- 可读性非常差
- 写正则表达式不难
1.含义
- 正则表达式,又称正规表达式、常规表达式
- 使用字符串来描述、匹配一系列符合某个规则的字符串
- 正则表达式组成
- 普通字符:大写小字母、数字、标点符号及一些其他符号
- 元字符:在正则表达式中具有特殊意义的专用字符
REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。
正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等
主要用来匹配字符串(命令结果,文本内容)
通配符匹配文件(而且是已存在的文件)
- 基本正则表达式(BRE:basic regular expression)
- 扩展正则表达式(ERE:extended regular expression)
- 编程语言支持的高级正则表达式
BRE和ERE语法基本一致,只有部分元字符(预定义号的带有特殊含义的一些符号)需要区别对待
扩展正则中,这些元字符可以直接使用:?、+、{、}、|、(和)
基础正则中,这些元字符前需要加转义(\):\?、\+、\{、\}、\|、\(和\)
grep sed默认使用基础正则表达式
grep -E、sed -r、egerp、awk扩展正则表达式
| 正则表达式 | |
| . | 任意单个字符 |
| [ ] | 任意单个字符 |
| * | 前面字符出现0到正无穷 |
| + | 1到正无穷 |
| {3} | 3次 |
| {n} | n次 |
| (n,) | 最少n次 |
| (,n) | 最多n次 |
| (n,m) | n到m次 |
| ^ | 开头 |
| $ | 结尾 |
| \b | 字符串的开头结尾 |
| .* | 1到正无穷 约等于+ |
| ^$ | 空行 |
2.元字符
| 元字符 | 含义 |
|---|---|
| . | 匹配任意单个字符,可以是一个汉字 |
| [] | 匹配指定范围内的任意单个字符,示例:[zhou] [0-9] [] [a-zA-Z] |
| [:alpha:] | [0-9a-zA-Z]= [:alnum:] |
| [^] | 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z] |
| [:alnum:] | 字母和数字 |
| [:alpha:] | 代表任何英文大小写字符,亦即 A-Z, a-z |
| [:lower:] | 小写字母,示例:[[:lower:]],相当于[a-z] |
| [:upper:] | 大写字母 |
| [:blank:] | 空白字符(空格和制表符) |
| [:space:] | 包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广 |
| [:cntrl:] | 不可打印的控制字符(退格、删除、警铃...) |
| [:digit:] | 十进制数字 |
| [:xdigit:] | 十六进制数字 |
| [:graph:] | 可打印的非空白字符 |
| [:print:] | 可打印字符 |
| [:punct:] | 标点符号 |
| \w | 匹配单词构成部分,等价于[_[:alnum:]] |
| \W | 匹配非单词构成部分,等价于[^_[:alnum:]] |
| \S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
| \s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] |
| 注意Unicode 正则表达式会匹配全角空格符 | |
[root@localhost ~]#ls /etc/|grep rc[.0-6]
#此处的点代表字符
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@localhost ~]#ls /etc/ | grep 'rc\.'
#点值表示点需要转义
rc.d
rc.local
[root@localhost ~]# grep r..t /etc/passwd
#r..t ..代表任意两个字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost ~]# echo abc |grep a.c
#表示原来的点需要加\转义
abc
[root@localhost ~]# echo abc |grep a\.c
#不加引号有时匹配会有出入
abc
[root@localhost ~]# echo abc |grep 'a\.c'
#标准格式需要加'' 或者""[root@localhost ~]# ls |grep '[zhou].txt'
#匹配[]中任意一个字符
h.txt
o.txt
u.txt
z.txt[root@localhost ~]# ls [a-d].txt
#通配符
a.txt A.txt b.txt B.txt c.txt C.txt d.txt
[root@localhost ~]# ls |grep '[a-d].txt'
#真正的小写在正则表达式中
a.txt
b.txt
c.txt
d.txt
[root@localhost ~]# ls |grep '[^a-z].txt'
#显示非小写字母
A.txt
B.txt[root@localhost ~]# ls |grep '[^a.z].txt'
#[]里就是本意不需要转义
2.1表示次数
| 元字符 | 含义 |
|---|---|
| * | 匹配前面的字符任意次,包括0次;贪婪模式:尽可能长的匹配 |
| .* | 任意长度的任意字符 不包括0次 |
| \? | 匹配其前面的字符出现0次或1次,即:可有可无 |
| \+ | 匹配其前面的字符出现最少1次,即:肯定有且≥1次 |
| \{n\} | 匹配前面的字符n次 |
| \{m,n\} | 匹配前面的字符至少m次,至多n次 |
| \{,n\} | 匹配前面的字符,至多n次,≤n |
| \{n,\} | 匹配前面的字符至少n次 |
[root@localhost ~]# echo google |grep 'go\{2\}gle'
#代表前面的o出现2次
google
[root@localhost ~]# echo gooooogle |grep 'go\{2,\}gle'
#代表前面的o出现2次以上
gooooogle
[root@localhost ~]# echo gooooogle |grep 'go\{2,5\}gle'
#代表前面的o出现2次以上5次以下
gooooogle
[root@localhost ~]# echo goooooogle |grep 'go*gle'
#表示0次到任意次
goooooogle
[root@localhost ~]# echo ggle |grep "go*gle"
ggle
[root@localhost ~]# echo gggle |grep "go*gle"
#grep 包含最前面的g不匹配
gggle
[root@localhost ~]# echo gdadadadgle |grep "g.*gle"
#.*代表任意匹配所有
gdadadadgle
[root@localhost ~]# echo ggle |grep "go\?gle"
# \?一次或者0次
ggle
[root@localhost ~]# echo gogle |grep "go\?gle"
gogle
[root@[root@localhost ~]# echo google |grep "go\+gle"
#一个以上
google
[root@localhost ~]# echo gogle |grep "go\+gle"
gogle
[root@localhost ~]# echo ggle |grep "go\+gle"
[root@localhost ~]# echo google |grep "go\?gle"[root@localhost ~]#echo abc|grep "[abc]\{3\}"
#需要加引号
#他的 匹配思路是 [abc]\{3\} 在匹配abc的时候
#第一轮 看 首字母 是否有abc中的一个, 第二轮也是看是否有abc中的一个 第三轮也是看是否有abc中的一个
[root@localhost ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.241.11 netmask 255.255.255.0 broadcast 192.168.241.255inet6 fe80::de6f:32c8:5a64:a6b2 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:51:4b:b5 txqueuelen 1000 (Ethernet)RX packets 30993 bytes 36718841 (35.0 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 13068 bytes 2850766 (2.7 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]#ifconfig ens33|grep netmaskinet 192.168.241.11 netmask 255.255.255.0 broadcast 192.168.241.255
[root@localhost ~]#ifconfig ens33|grep netmask|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
192.168.241
255.255.255
192.168.241
[root@localhost ~]#ifconfig ens33|grep netmask|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|head -n1
192.168.241
3.位置锚定
| 符号 | 含义 |
|---|---|
| ^ | 行首锚定,用于模式的最左侧 |
| $ | 行尾锚定,用于模式的最右侧 |
| ^PATTERN$ | 用于模式匹配整行 |
| ^$ | 空行 |
| ^[[:space:]]*$ | 空白行(tab、换行、回车) |
| \<或\b | 词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部) |
| \>或\b | 词尾锚定,用于单词模式的右侧 |
| \<PATTERN\> | 匹配整个单词(\root\) |
[root@localhost ~]#grep "^[^#]" /etc/fstab
#过滤出不是以#开头的非空行
/dev/mapper/centos-root / xfs defaults 0 0
UUID=0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
[root@localhost ~]#cat /etc/fstab #
# /etc/fstab
# Created by anaconda on Tue Dec 19 00:11:27 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0[root@localhost ~]#grep "^root$" /etc/passwd
#只匹配root这个字符[root@localhost ~]#echo hello-123|grep "\<123"
hello-123
#除了字母、数字、下划线其他都算单词的分隔符
4.分组或其他
分组:用()将多个字符捆绑在一起,当作一个整体处理
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,...;\1表示从左侧第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

[root@localhost ~]#ifconfig ens33|grep netmask|grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{3\}'|head -1
#匹配netmask 匹配0-9任意数字出现三次 .出现三次 0-9任意数字出现三次 取第一个
192.168.241.255
[root@localhost ~]#ifconfig ens33 |grep netmask|grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -1
#匹配netmask 匹配0-9任意数字出现三次 .出现三次 0-9任意数字出现三次 取第一个
192.168.241.11
[root@localhost ~]#ifconfig ens33 |grep netmask|grep -Eo '([0-9]{1,3}.){4}'
#匹配netmask 匹配0-9任意数字 . 出现一到三次 共出现四次
192.168.241.11
255.255.255.0
192.168.241.255
5.扩展正则表达式
grep -E egrep 默认使用的是扩展正则表达式
| 符号 | 含义 |
|---|---|
| * | 匹配前面字符任意次 |
| ? | 0次或1次 |
| + | 1次或多次 |
| {n} | 匹配n次 |
| {m,n} | 至少n次,至多n次 |
| {,n} | 匹配前面的字符至多n次,≤n,n可以为0 |
| {n,} | 匹配前面的字符至少n次,≤n,n可以为0 |
| 分组 | 含义 |
|---|---|
| ()分组 | 分组:() 将多个字符捆绑在一起,当作一个整体处理 |
| | 或者 | a|b 表示a或b C|cat C或cat (C|c)at 表示Cat或cat |

相关文章:
Linux系统——正则表达式
有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息 1.使用提取命令(cut、awk、sed)提取出ip地址的那一列 2.使用sort按数字排序,将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…...
【文本到上下文 #9】NLP中的BERT和迁移学习
一、说明 BERT:适合所有人的架构概述:我们将分解 BERT 的核心组件,解释该模型如何改变机器理解人类语言的方式,以及为什么它比以前的模型有重大进步。 BERT的变体: 在BERT取得成功之后,已…...
github单文件下载——DownGit
记录一下一个好用的网站,支持github中某一特定文件夹下文件的下载 选择一个合适的梯子,访问Downgit网址 https://minhaskamal.github.io/DownGit/#/home 将所需网站连接粘贴到这里,点击download即可...
Java之Stream的应用与原理分析
前言 stream是怎么做到一次迭代中将所有流操作进行叠加?stream怎么做到只有在终止操作时进行元素遍历?那中间操作是做了些什么? Stream 与集合的区别 集合是内存中的数据结构抽象,描述了数据在内存中是如何存储的。流描述了对数据…...
Git 实战场景过程(工作总结篇)
目录 前言1. Git远程仓库建立分支,本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 前言 主要总结工作中的疑惑点,如果你也有相应的场景,可以评论区见&…...
iperf3 打流工具的使用介绍
目录 1. iperf3简介 2. 详细命令参数 1. iperf3简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议(TCP,UDP,SCTP与IPv4和IPv6)有关的各种参数。对于每次测试,它都会详细的带宽报告&a…...
网络异常案例一_RST
本文以及后面几篇会整理输出下以前处理过的一些网络相关的异常 4G定向卡上网问题 问题现象,自研路由器,使用运营商定向的4G卡上网,访问服务器异常,相应的开发同学反馈被服务器拒绝了; 复现问题,同步在cli…...
提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023
作为全球领先的PDF编辑软件,Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户,Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…...
清空在Linux系统上的操作记录
在Linux中,操作记录通常涉及到不同的系统组件,包括bash shell的历史命令记录、系统日志文件等。以下是如何清除一些常见记录的步骤: 1. 清空bash历史命令记录history -c # 清除当前用户的bash历史记录rm -f ~/.bash_history # 删除保存在用户…...
Java链表(2)
🐵本篇文章将对双向链表进行讲解,模拟实现双向链表的常用方法 一、什么是双向链表 双向链表在指针域上相较于单链表,每一个节点多了一个指向前驱节点的引用prev以及多了指向最后一个节点的引用last: 二、双向链表的模拟实现 首先…...
Python qt.qpa.xcb: could not connect to display解决办法
遇到问题:qt.qpa.xcb: could not connect to display 解决办法,在命令行输入: export DISPLAY:0 然后重新跑python程序,解决! 参考博客:qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …...
Compose | UI组件(八) | Dialog - 对话框
文章目录 前言Dialog 普通弹框Dialog 普通弹框的使用AlertDialog 警告弹框AlertDialog 警告弹框的使用 总结 前言 在我们传统的UI界面中,经常用到弹框,Compose也有弹框,但是Compose的弹框显示和隐藏和传统的弹框显示(show&#x…...
【Spark系列6】如何做SQL查询优化和执行计划分析
Apache Spark SQL 使用 Catalyst 优化器来生成逻辑执行计划和物理执行计划。逻辑执行计划描述了逻辑上如何执行查询,而物理执行计划则是 Spark 实际执行的步骤。 一、查询优化 示例 1:过滤提前 未优化的查询 val salesData spark.read.parquet(&quo…...
Observability:在 Elastic Stack 8.12 中使用 Elastic Agent 性能预设
作者:来自 Elastic Nima Rezainia, Bill Easton 8.12 中 Elastic Agent 性能有了重大改进 最新版本 8.12 标志着 Elastic Agent 和 Beats 调整方面的重大转变。 在此更新中,Elastic 引入了 Performance Presets,旨在简化用户的调整过程并增强…...
空间数据分析和空间统计工具库PySAL入门
空间数据分析是指利用地理信息系统(GIS)技术和空间统计学等方法,对空间数据进行处理、分析和可视化,以揭示数据之间的空间关系和趋势性,为决策者提供有效的空间决策支持。空间数据分析已经被广泛运用在城市规划、交通管理、环境保护、农业种植…...
LabVIEW电液伺服控制系统
介绍了如何利用ARM微处理器和LabVIEW软件开发一个高效、精准的电液伺服控制系统。通过结合这两种技术,我们能够提高系统的数字化程度、集成化水平,以及控制精度,从而应对传统电液伺服控制器面临的问题。 该电液伺服控制系统由多个关键部分组…...
Dubbo_入门
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 Dubbo_入门 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是分布式系统二、什么…...
Ubuntu22.04更换软件源
本文以Ubuntu22.04更换科大源为例演示更改软件源的方法,其他版本的Ubuntu系统或更换其他软件源,如清华源,阿里源等,方法类似。 前言 中国科学技术大学开源软件镜像由中国科学技术大学网络信息中心提供支持。 mirrors.ustc.edu.…...
解密Android某信聊天记录
前置条件 frida, frida-tools, adb 获取密码 h.js console.log(script loaded successfully);function xx() {function strf(str, replacements) {return str.replace(/\$\{\w\}/g, function(placeholderWithDelimiters) {var placeholderWithoutDelimiters placeholderWi…...
海外云手机对于亚马逊卖家的作用
近年来,海外云手机作为一种新型模式迅速崭露头角,成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据,通过网页端操作,将手机芯片放置在机房,通过网络连接到服务器,为用户提供便捷的上网功能。因…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
