Linux系统——正则表达式

有一段时间本机访问量过高,如何查看日志提取出访问量前十的信息

1.使用提取命令(cut、awk、sed)提取出ip地址的那一列

2.使用sort按数字排序,将相同的地址整合到一起

3.使用uniq -c统计出数量

4.使用sort 数字  数字倒序排序

5.最后用head 取前十

一、正则表达式 

搜索字符的方式

  1. 精确搜索
  2. 正则表达式搜索 
  • 元字符:预定好的具有特殊含义的符号,这些符号能够进行通配
  • 可读性非常差
  • 写正则表达式不难

1.含义 

  1. 正则表达式,又称正规表达式、常规表达式
  2. 使用字符串来描述、匹配一系列符合某个规则的字符串
  3. 正则表达式组成
  • 普通字符:大写小字母、数字、标点符号及一些其他符号
  • 元字符:在正则表达式中具有特殊意义的专用字符

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【React教程】(2) React之JSX入门与列表渲染、条件渲染详细代码示例

目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1&#xff1a;示例2&#xff1a;示例3&#xff08…

Learn to Earn,Move星航计划第三期诚邀您探索编程和区块链的乐趣

*以下文章来源于MoveFuns &#xff0c;作者MoveFuns DAO 星航计划是一个 Web3 技术的公益计划,旨在引导更多的人加入开源社区,学习Move语言&#xff0c;了解Web3。本期星航计划由 MoveFuns Dao 发起&#xff0c;由Sui官方基金会支持&#xff0c;汇集了 Web3开发领域内的专业导…

FullStack之Django(1)开发环境配置

FullStack之Django(1)开发环境配置 author: Once Day date&#xff1a;2022年2月11日/2024年1月27日 漫漫长路&#xff0c;才刚刚开始… 全系列文档请查看专栏: FullStack开发_Once_day的博客-CSDN博客Django开发_Once_day的博客-CSDN博客 具体参考文档: The web framewor…

图灵之旅--ArrayList顺序表LinkedList链表栈Stack队列Queue

目录 线性表顺序表ArrayList简介ArrayList使用ArrayList的构造ArrayList常见操作ArrayList的遍历ArrayList的扩容机制利用ArrayList洗牌ArrayList的优缺点 链表链表的实现双向链表的实现 LinkedListLinkedList引入LinkedList的使用LinkedList的构造LinkedList的常用方法介绍Lin…

ArcGIS Pro如何新建字段

无论是地图制作还是数据分析&#xff0c;字段的操作是必不可少的&#xff0c;在某些时候现有的字段不能满足需求还需要新建字段&#xff0c;这里为大家讲解一下在ArcGIS Pro中怎么新建字段&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的水…

pytorch安装教程(Anaconda + GPU)

可以去nvidia官网更新驱动 获取下载pytorch的命令地址&#xff1a;Start Locally | PyTorch 在这里可以找到旧版本的cuda的命令&#xff1a;Previous PyTorch Versions | PyTorch 如果使用conda没有安装成功的话&#xff0c;就使用pip&#xff1a;

ToF传感器在移动机器人中的作用

原创 | 文 BFT机器人 在日新月异的机器人技术领域&#xff0c;技术的无缝整合正引领着人类与机器交互方式的革新潮流。ToF传感器作为变革性创新的一个例子&#xff0c;对移动机器人更好地感知周围环境起到了决定性的作用。 ToF传感器与激光雷达技术在创建深度图方面有着异曲同…

大模型视觉理解能力更进一步,谷歌提出全新像素级对齐模型PixelLLM

论文题目&#xff1a;Pixel Aligned Language Models 论文链接&#xff1a;https://arxiv.org/abs/2312.09237 项目主页&#xff1a;Pixel Aligned Language Models 近一段时间以来&#xff0c;大型语言模型&#xff08;LLM&#xff09;在计算机视觉领域中也取得了巨大的成功&a…

Unity 观察者模式(实例详解)

文章目录 简介示例1 - 简单的文本更新通知示例2 - 多观察者监听游戏分数变化示例3 - 事件系统实现观察者模式示例4 - 泛型观察者和可序列化的事件系统示例5 - 使用C#委托简化版 简介 在Unity中实现观察者模式&#xff0c;我们可以创建一个Subject&#xff08;目标/主题&#x…

前端面试题-js部分-数组去重-数组扁平化-伪数组转数组-面向对象的继承方式(ES5)

前端面试题-js部分-数组去重-数组扁平化-伪数组转数组-面向对象的继承方式ES5 数组去重数组扁平化伪数组转换为数组面向对象的继承方式&#xff08;ES5&#xff09; 数组去重 1.利用es6 set 去重 Set 类型不允许有值重复 let arr1 [1, 2, 4, 3, 5, 7, 1, 8, 2, 4, 9]console.…

【郑益慧】模拟电子技术:7.Mos管的工作原理

Mos管的工作原理 Mos管的出现&#xff0c;几乎不怎么耗电。因此在集成电路中起了非常大的作用 在某些方面确实比晶体三极管强。 基本原理&#xff1a;依靠电场效应来控制。 电场效应几乎是没有电流的&#xff0c;没有电流几乎是没有功率的。 从控制上来说&#xff0c;消耗…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…

Stable Diffusion结构解析-以图像生成图像!

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; AIGC专栏3——Stable Diffusion结构解析-以图像生成图像&#xff08;图生图&#xff0c…

【活动回顾】CSDN 1024 程序员节城市站系列活动·成都站 - 圆满结束!

文章目录 前言一、活动介绍二、精彩分享内容及活动议程2.1、1024 活动限量周边大放送2.2、《COC 成都社区情况和活动介绍》2.3、CSDN 创始人蒋涛寄语2.4、《AI 重构世界》2.5、《新技术助力企业降本增效》2.6、现场互动情况2.7、《探索开源世界&#xff0c;开拓创新思路》2.8、…

用C#实现最小二乘法(用OxyPlot绘图)

最小二乘法介绍✨ 最小二乘法&#xff08;Least Squares Method&#xff09;是一种常见的数学优化技术&#xff0c;广泛应用于数据拟合、回归分析和参数估计等领域。其目标是通过最小化残差平方和来找到一组参数&#xff0c;使得模型预测值与观测值之间的差异最小化。 最小二…

电商API接口的应用|电商跨境电商商品采集高效解决方案

电商API接口的应用|电商跨境电商商品采集高效解决方案 面对数十万亿元的跨境电商市场&#xff0c;以阿里巴巴国际站为代表的跨境电商数字平台&#xff0c;在政策、需求以及供应链的驱动下&#xff0c;为中小企业提供了全产业链、全供应链一体化综合服务&#xff0c;让越来越多…

使用plotly dash 画3d圆柱(Python)

plotly3D &#xff08;3d charts in Python&#xff09;可以画3维图形 在做圆柱的3D装箱项目&#xff0c;需要装箱的可视化&#xff0c;但是Mesh &#xff08;3d mesh plots in Python&#xff09;只能画三角形&#xff0c;所以需要用多个三角形拼成一个圆柱&#xff08;想做立…

Python qt.qpa.xcb: could not connect to display解决办法

遇到问题&#xff1a;qt.qpa.xcb: could not connect to display 解决办法&#xff0c;在命令行输入&#xff1a; export DISPLAY:0 然后重新跑python程序&#xff0c;解决&#xff01; 参考博客&#xff1a;qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could …

Ubuntu搭建国标平台wvp-GB28181-pro

目录 简介安装和编译1.查看操作系统信息2.安装最新版的nodejs3.安装java环境4.安装mysql5.安装redis6.安装编译器7.安装cmake8.安装依赖库9.编译ZLMediaKit9.1.编译结果说明 10.编译wvp-GB28181-pro10.1.编译结果说明 配置1.WVP-PRO配置文件1.1.Mysql数据库配置1.2.REDIS数据库…

监听项目中指定属性数据,点击或模块显示时

当项目中&#xff0c;需要获取某个页面上、某个标签上、有指定自定义属性时&#xff0c;需要在点击该元素时进行公共逻辑处理&#xff0c;或该元素在显示的时候进行逻辑处理&#xff0c;这时可以定义一个公共的方法&#xff0c;在每个页面引用&#xff0c;并写入数据即可 &…