当前位置: 首页 > news >正文

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

相关文章:

Linux系统——正则表达式

有一段时间本机访问量过高&#xff0c;如何查看日志提取出访问量前十的信息 1.使用提取命令&#xff08;cut、awk、sed&#xff09;提取出ip地址的那一列 2.使用sort按数字排序&#xff0c;将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…...

【文本到上下文 #9】NLP中的BERT和迁移学习

​ ​ 一、说明 ​BERT&#xff1a;适合所有人的架构概述&#xff1a;我们将分解 BERT 的核心组件&#xff0c;解释该模型如何改变机器理解人类语言的方式&#xff0c;以及为什么它比以前的模型有重大进步。    ​BERT的变体&#xff1a; 在BERT取得成功之后&#xff0c;已…...

github单文件下载——DownGit

记录一下一个好用的网站&#xff0c;支持github中某一特定文件夹下文件的下载 选择一个合适的梯子&#xff0c;访问Downgit网址 https://minhaskamal.github.io/DownGit/#/home 将所需网站连接粘贴到这里&#xff0c;点击download即可...

Java之Stream的应用与原理分析

前言 stream是怎么做到一次迭代中将所有流操作进行叠加&#xff1f;stream怎么做到只有在终止操作时进行元素遍历&#xff1f;那中间操作是做了些什么&#xff1f; Stream 与集合的区别 集合是内存中的数据结构抽象&#xff0c;描述了数据在内存中是如何存储的。流描述了对数据…...

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支&#xff0c;本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 前言 主要总结工作中的疑惑点&#xff0c;如果你也有相应的场景&#xff0c;可以评论区见&…...

iperf3 打流工具的使用介绍

目录 1. iperf3简介 2. 详细命令参数 1. iperf3简介 iPerf3是用于主动测试IP网络上最大可用带宽的工具。它支持时序、缓冲区、协议&#xff08;TCP&#xff0c;UDP&#xff0c;SCTP与IPv4和IPv6&#xff09;有关的各种参数。对于每次测试&#xff0c;它都会详细的带宽报告&a…...

网络异常案例一_RST

本文以及后面几篇会整理输出下以前处理过的一些网络相关的异常 4G定向卡上网问题 问题现象&#xff0c;自研路由器&#xff0c;使用运营商定向的4G卡上网&#xff0c;访问服务器异常&#xff0c;相应的开发同学反馈被服务器拒绝了&#xff1b; 复现问题&#xff0c;同步在cli…...

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件&#xff0c;Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户&#xff0c;Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…...

清空在Linux系统上的操作记录

在Linux中&#xff0c;操作记录通常涉及到不同的系统组件&#xff0c;包括bash shell的历史命令记录、系统日志文件等。以下是如何清除一些常见记录的步骤&#xff1a; 1. 清空bash历史命令记录history -c # 清除当前用户的bash历史记录rm -f ~/.bash_history # 删除保存在用户…...

Java链表(2)

&#x1f435;本篇文章将对双向链表进行讲解&#xff0c;模拟实现双向链表的常用方法 一、什么是双向链表 双向链表在指针域上相较于单链表&#xff0c;每一个节点多了一个指向前驱节点的引用prev以及多了指向最后一个节点的引用last&#xff1a; 二、双向链表的模拟实现 首先…...

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 …...

Compose | UI组件(八) | Dialog - 对话框

文章目录 前言Dialog 普通弹框Dialog 普通弹框的使用AlertDialog 警告弹框AlertDialog 警告弹框的使用 总结 前言 在我们传统的UI界面中&#xff0c;经常用到弹框&#xff0c;Compose也有弹框&#xff0c;但是Compose的弹框显示和隐藏和传统的弹框显示&#xff08;show&#x…...

【Spark系列6】如何做SQL查询优化和执行计划分析

Apache Spark SQL 使用 Catalyst 优化器来生成逻辑执行计划和物理执行计划。逻辑执行计划描述了逻辑上如何执行查询&#xff0c;而物理执行计划则是 Spark 实际执行的步骤。 一、查询优化 示例 1&#xff1a;过滤提前 未优化的查询 val salesData spark.read.parquet(&quo…...

Observability:在 Elastic Stack 8.12 中使用 Elastic Agent 性能预设

作者&#xff1a;来自 Elastic Nima Rezainia, Bill Easton 8.12 中 Elastic Agent 性能有了重大改进 最新版本 8.12 标志着 Elastic Agent 和 Beats 调整方面的重大转变。 在此更新中&#xff0c;Elastic 引入了 Performance Presets&#xff0c;旨在简化用户的调整过程并增强…...

空间数据分析和空间统计工具库PySAL入门

空间数据分析是指利用地理信息系统(GIS)技术和空间统计学等方法&#xff0c;对空间数据进行处理、分析和可视化&#xff0c;以揭示数据之间的空间关系和趋势性&#xff0c;为决策者提供有效的空间决策支持。空间数据分析已经被广泛运用在城市规划、交通管理、环境保护、农业种植…...

LabVIEW电液伺服控制系统

介绍了如何利用ARM微处理器和LabVIEW软件开发一个高效、精准的电液伺服控制系统。通过结合这两种技术&#xff0c;我们能够提高系统的数字化程度、集成化水平&#xff0c;以及控制精度&#xff0c;从而应对传统电液伺服控制器面临的问题。 该电液伺服控制系统由多个关键部分组…...

Dubbo_入门

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 Dubbo_入门 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是分布式系统二、什么…...

Ubuntu22.04更换软件源

本文以Ubuntu22.04更换科大源为例演示更改软件源的方法&#xff0c;其他版本的Ubuntu系统或更换其他软件源&#xff0c;如清华源&#xff0c;阿里源等&#xff0c;方法类似。 前言 中国科学技术大学开源软件镜像由中国科学技术大学网络信息中心提供支持。 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…...

海外云手机对于亚马逊卖家的作用

近年来&#xff0c;海外云手机作为一种新型模式迅速崭露头角&#xff0c;成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据&#xff0c;通过网页端操作&#xff0c;将手机芯片放置在机房&#xff0c;通过网络连接到服务器&#xff0c;为用户提供便捷的上网功能。因…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...