Linux系统——正则表达式

news2024/12/24 1:45:58

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

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 1500
        inet 192.168.241.11  netmask 255.255.255.0  broadcast 192.168.241.255
        inet6 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 0
        TX packets 13068  bytes 2850766 (2.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@localhost ~]#ifconfig ens33|grep netmask
        inet 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.coloradmin.cn/o/1419101.html

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

相关文章

[C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!

一&#xff0c;题目 遇到的一道算法题&#xff1a; 1&#xff0c;已知有一个数字矩阵&#xff08;row行&#xff0c;col列&#xff09;&#xff0c;矩阵的每行 从左到右 递增&#xff0c;每列 从上到下 递增。 2&#xff0c;现输入一个数字 num &#xff0c;判断数字矩阵中…

防御保护常用知识

防火墙的主要职责在于&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作 防火墙分类主要有四类&#xff1a; 防火墙吞吐量 --- 防火墙同一时间能处理的数据量多少 防火墙的发展主要经过以下阶段&#xff1b; 传统防火墙&#xf…

报错“MySql配置文件已损坏,请联系技术支持”的解决方法

目录 第一步 打开控制面板&#xff0c;选择管理工具&#xff0c;再选择事件查看器 第二步 在【应用程序】里找到这条报错&#xff0c;记下来文件内容。我自己的来源是“MsiInstaller” 第三步 winR组合键&#xff0c;输入regedit打开注册表 第四步 根据前面报错的文件名定位…

【Python笔记-设计模式】抽象工厂模式

一、说明 (一) 解决问题 抽象工厂是一种创建型设计模式&#xff0c;主要解决接口选择的问题。能够创建一系列相关的对象&#xff0c;而无需指定其具体类。 (二) 使用场景 系统中有多于一个的产品族&#xff0c;且这些产品族类的产品需实现同样的接口。 例如&#xff1a;有…

仅使用 Python 创建的 Web 应用程序(前端版本)第10章_订单列表

本章我们将实现订单列表页面。 完成后的图像如下。 创建过程与之前相同,如下。 No分类内容1Model创建继承BaseDataModel的数据类Order、OrderDetail2Service创建一个 OrderAPIClient3Page定义PageId并创建继承自BasePage的页面类4Application将页面 ID 和页面类对添加到 Mult…

春节寄快递贵?想要便宜寄快递?那是你没找到寄快递便宜的渠道!

春节将至&#xff0c;公司会发放一大批的年货礼品给员工们&#xff0c;来聊表这一年来的勤恳工作的心意。但是想要拿走这么多的年货&#xff0c;可不是一件容易的事情啊&#xff0c;这时候我们可以通过邮寄的方式把东西邮寄走&#xff0c;是不是省了很多事呢&#xff0c;不仅回…

Unity之动画和角色控制

目录 &#x1f4d5; 一、动画 1.创建最简单的动画 2.动画控制器 &#x1f4d5;二、把动画和角色控制相结合 &#x1f4d5;三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 &#x1f4d5;四、混合动画 最近学到动画了&#xff0c;顺便把之前创建的地形&#xff0…

uniapp实现页面左滑右滑切换内容

uniapp uview&#xff1a;使用uniapp的swiper和uview的tabs标签组合实现 Tabs 标签 | uview-plus 3.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架 vue <template> <view class"main"> <view class""> …

Spring中用Mybatis注解查询映射多个对象

1.映射写法如下 SelectProvider(type UserGroupMapper.class, method "getOrigins")Results({Result(property "id", column "id"),Result(property "groupId", column "groupId"),Result(property "resId&qu…

C#,打印漂亮杨辉三角形(帕斯卡三角形)的源代码

杨辉 Blaise Pascal 这是某些程序员看完会哭的代码。 杨辉三角形&#xff08;Yanghui Triangle&#xff09;&#xff0c;是一种序列数值的三角形几何排列&#xff0c;最早出现于南宋数学家杨辉1261年所著的《详解九章算法》一书。 欧洲学者&#xff0c;最先由帕斯卡&#x…

老龄化对投资意味着什么?

1月15日&#xff0c;国务院办公厅印发《关于发展银发经济增进老年人福祉的意见》从4个方面提出26项举措&#xff0c;为我国首个以“银发经济”命名的政策文件。 近期&#xff0c;国信证券分析师王开发布题为《银发经济再思考&#xff1a;老龄化对投资的影响》的报告&#xff0…

使用this调用兄弟构造器

在任意类的构造器中&#xff0c;都可以通过this(...)去调用该类的其他构造器。 假如说只给有参构造器传了两个参数&#xff0c;想让第三个参数有默认值&#xff0c;那么可以这样&#xff1a; 可以看出有一部分代码重复了&#xff0c;那么可以通过this()优化&#xff1a; 这样可…

202412读书笔记|《做自己的花》——走自己的路,成为自己的星星

202412读书笔记|《做自己的花》——走自己的路&#xff0c;成为自己的星星 《做自己的花&#xff08;微信读书联合出品&#xff09;》作者月芽&#xff0c;一个用画画和诗讲故事的插画师、诗人。 画风治愈&#xff0c;故事感强&#xff0c;擅长在童话般的故事中描绘现实温暖的心…

js实现贪吃蛇

文章目录 实现方法_11实现效果2 实现步骤2.1 移动场地2.2 游戏难度2.3 造蛇和食物2.4 蛇的移动2.5 产生食物的随机位置 3 全部代码 实现方法_21 实现效果2实现想法2.1 蛇的存储和显示2.2 蛇的移动(重难点)2.3 吃食物 3 完整代码 实现方法_1 1实现效果 2 实现步骤 html部分忽略…

酒鬼酒2024年展望:稳发展动能,迈入恢复性增长轨道

文 | 琥珀酒研社 作者 | 渡过 最近几个月来&#xff0c;白酒估值回落到近十年来低位&#xff0c;反映出了整个白酒行业的市场低迷和虚弱现状。不管是头部企业五粮液、泸州老窖&#xff0c;还是区域酒企口子窖、金种子酒等&#xff0c;最近都通过“回购”或“增持”&#xff0…

python之组合数据类型-列表

列表操作 列表增删改查列表增加元素的方法列表删除元素的方法列表修改元素的方法列表查找元素的方法 列表其他常用方法列表的切片用法列表修改排序的方法列表的常用符号、常用函数 列表是什么&#xff1f; 列表是有序集合&#xff0c;列表可以一次性存储几个或几万个元素&#…

【安装指南】HBuilder X 下载、安装详细教程

目录 &#x1f33a;1. 概述 &#x1f33b;2. HBuilder X 安装包下载 &#x1f33c;3. 安装详细教程 &#x1f33a;1. 概述 HBuilder X 是一款由DCloud开发的基于Electron框架的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Web和移动应用程序的开发。以下是…

表贴式PMSM的直接转矩控制(DTC)MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 表贴式PMSM的直接转矩控制(DTC),直接使用滞环控制对转矩和磁链进行控制&#xff0c;相对于传统的FOC控制而言&#xff0c;其不需要进行解耦变换&#xff0c;在此次的有以下几点需要注意&#xff1a…

uniCloud ---- JQL语法 连表查询

目录 JQL数据库操作 JQL流程图解 JQL的限制 单表查询 联表查询 新增 修改 删除 联表查询 例子 字段过滤field 字段别名as 限制查询记录的条数limit 只查一条记录getone JQL数据库操作 JQL&#xff0c;全称 javascript query language&#xff0c;是一种js方式操…