三剑客与正则系列-正则表达式

news/2025/3/1 17:57:05/文章来源:https://www.cnblogs.com/liaofy/p/18745234

1.注意事项

  • 正则符号都是英文符号,避免使用中文符号
  • 推荐使用grep/egrep命令,默认设置了别名,自动加上颜色
  • http://nbre.oldboylinux.cn/ 分析正则与正则匹配到的内容.
  • 其他坑.
#'' "" .
#‘’ ”“ 。
alias grep='grep color=auto'
alias egrep='egrep color=auto'

2.符号概述

正则:regular expression RE

正则表达式 regular expression regexp 符号
基础正则BRE (Basic RE) ^ $ . * .* [] [^]
扩展正则ERE (Extended RE)121 | + () {} ?
Perl语言正则(其他)

3.基础正则

  • 三剑客命令默认支持的正则

  • 环境准备

cat >/oldboy/re.txt<<EOF
I am oldboy teacher!
I teach linux.I like badminton ball ,billiard ball and chinese
chess!
my blog is http:oldboy.blog.51cto.com  
our size is http:blog.oldboyedu.com  my qq is 49000448
not 4900000448.my god ,i am not oldbey,but OLDBOY!
EOF

3.1 ^ 以....开头的行

英文的符号,如果是中文的^是省略号.

  • 以 m 开头的行

image

3.2 $ 以....结尾的行

  • 以数字8结尾的行

image

  • 找出文件中以字母m结尾的行

cat -A 显示出文件中的特殊隐藏符号

image

image

  • ^m$匹配了什么?

image

3.3 ^$ 空行,这行中没有任何字符

  • 过滤出文件中的空行并显示行号

image

  • 排除空行
    image

  • 正则案例:排除/etc/ssh/sshd_config文件中的空行,然后排除以#号开头的行(可以使用管道)

grep -v '^$' /etc/ssh/sshd_config |grep -v '^#'

应用建议: 用于排除文件中的空行使用,排除空行和带井号的行

3.4 . 表示任意一个字符,不匹配空行

初学正则较少单独使用

  • oldb任意一个字符 y
    image

了解: .过滤的时候会排除空行. 点不会匹配空行

  • grep -o选项,显示正则匹配到了什么? 显示执行过程.

image

3.5 \ 撬棍 转义字符 脱掉马甲打回原形,去掉特殊符号 的含义.

  • 找出文件中以 . (点)结尾的行

image

  未来在扩展正则中 \ 撬棍, 唤醒前世记忆从而含有特殊含义了.

3.6 * 前一个字符连续出现0次或0次以上

初学正则使用较少.

核心掌握:什么是连续出现/重复.

  • 这个符号刚开始学习正则的时候,不常用.
  • 刚刚开始的时候掌握:什么叫连续出现即可.
1     数字1出现1次
111   数字1出现3次
11111111111111111111111111  多次123   数字出现3次
oldboy 字母出现6次
oldboy996 连续出现的数字和小写字母
Lidao996   连续出现的数字和大小写字母
  • 关于出现0次: 这个符号没有的意思

image

3.7 . * 所有,任何字符

是正则中使用频率非常高的符号. 是一个组合

  • . 任意一个字符

  • * 前一个字符连续出现0次或0次以上

  • . * 表示所有.

  • 以任意内容开头直到匹配到am字符的行

image

  • 你贪婪吗?

    • 正则表示连续出现的时候或者表示所有的时候,正则体现出贪婪性,尽可能多的匹配.
    • 未来我们根据实际的需求使用贪婪性即可
  • 匹配开头一直到o的内容

image

3.8 [ ] [abc] 表示匹配任意1个字符,a或b或c,中括号 相当于一个字符

使用频率较高的正则.

() 小括号
[] 中括号
{} 大括号 花括号
  • [abc]

image

image

  • 匹配数字
grep '[0-9]' re.txt
  • 匹配小写字母
[a-z]
  • 匹配大写字母
[A-Z]
  • 匹配大小写字母
[a-zA-Z]
[a-Z] #如果这个用不了使用上面完成形式

image

  • 匹配大小写字母+数字
grep '[a-zA-Z0-9]' re.txt
grep '[a-Z0-9]' re.txt
grep '[0-Z]' re.txt
  • 匹配出以字母m或n开头的行

image

  • 匹配出以 . 或空格或 ! 结尾的行

image

温馨提示: [ ]中会自动去掉符号的特殊含义

3.9 [^] [^abc] 表示匹配任意1个字符,排除abc,中 括号相当于一个字符

建议掌握正则一段时间后再来理解与使用

image

3.10.0 小结基础正则

基础正则 含义
^ ⭐ ⭐ ⭐ ⭐ ⭐ 以xxx开头的行
$ ⭐ ⭐ ⭐ ⭐ ⭐ 以xxx结尾的行
^$ ⭐ ⭐ ⭐ ⭐ ⭐ 空行
. 任意一个字符
\ 转义字符,撬棍
* 前一个字符出现0次或0次以上
. *⭐ ⭐ ⭐ ⭐ ⭐ 所有
[ ] ⭐ ⭐ ⭐ ⭐ ⭐ [abc] a或b或c, []相当于是1个字符
[^]⭐ ⭐ ⭐ ⭐ ⭐ [^abc] 匹配除了abc之外的内容, []相当于是1个字符

4.扩展正则

  • grep===egrep 或 grep -E

  • sed 使用sed -r支持扩展正则

  • awk 默认支持扩展正则.

#Linux三剑客如何支持扩展正则
## grep命令,推荐使用前2个.
egrep '0+' re.txt
grep -E '0+' re.txt
grep '0\+' re.txt
## sed 需要使用-r选项
## awk 直接支持扩展正则

4.1 + 前一个字符连续出现1次或1次以上

  • +大部分配合着[]一起使用.

  • 取出连续出现的0

image

image

  • 取出连续的出现的数字

image

  • 取出连续出现的字母(单词)

image

4.2 | 或者

一般用于单词或者.

  • 文件中包含oldboy或linux的行

image

  • 在/etc/services过滤出包含ssh或http或smtp的行

image

  • 排除/etc/ssh/sshd_config中的空行或注释,输出的时候显示行号
grep -v '^$' /etc/ssh/sshd_config |grep -v '^#'
egrep -vn '^$|^#' /etc/ssh/sshd_config
#一些配置文件中有空行,以#开头的行,不带注释的正常的行以字母开头的行
正常的配置的行,以字母开头的行.
grep '^[a-Z]' /etc/ssh/sshd_config

image

4.3 () 表示一个整体,用于后向引用(反向引用sed)

一般用于表示整体或在sed命令中实现后向引用.

  • 检查系统中tree,vim,sl软件是否安装.

image

4.4 {} a{n,m} 前一个字符连续出现至少n次,最多m次

使用频率不高,可以通过{}精确控制出现次数

格式 应用
a{n,m} 前一个字符连续出现至少n次,最多m次 表示连续出现的范围
a{n} 前一个字符连续出现n次 匹配固定的次数.
a{n,} 前一个字符连续出现至少n次
a{,m} 前一个字符连续出现,最多m次

image

  • 匹配身份证的正则
分析规律.
18位 数字或X
X在最后一位
身份照 18位 17位是数字 最后1位数字或X[root@myvps ~]# cat id2.txt
谈媚轩 230189199012251659
庾菲刚 23018199012015108
桑春 23018215507074953
范惠融 230182197510240695
霍莎 23018219590413055X
单燕可 230182197007233320
雷聪 23018215709180586
郑芬澜 23018199402088233
阙宁茜 230182198305100379 
赵璧桂 23018195312204747
史勤 23018218107207651
项珠 230182195305221943
季艳盛 230182195604045725
吕进 230182196412284021
翟竹静 230182196102271858
翟竹静 23018219610227
翟竹静 2301821922
翟竹静 230181922cat >id2.txt<<EOF
谈媚轩 230189199012251659
庾菲刚 23018199012015108
桑春 23018215507074953
范惠融 230182197510240695
霍莎 23018219590413055X
单燕可 230182197007233320
雷聪 23018215709180586
郑芬澜 23018199402088233
阙宁茜 230182198305100379
赵璧桂 23018195312204747
史勤 23018218107207651
项珠 230182195305221943
季艳盛 230182195604045725
吕进 230182196412284021
翟竹静 230182196102271858
翟竹静 23018219610227
翟竹静 2301821922
翟竹静 230181922
EOF

image

  • 匹配ip的正则
#创建环境
echo 10.0.0.{1254} |xargs -n1 > ip.txt
#正则匹配
egrep '[0-9]{1,3}$' ip.txt

稍微复杂的匹配身份证的正则

image

4.5 ? 前一个字符 出现0次或1次

使用较少.

一般用于匹配的内容可能有(出现1次)或者没有出现(出现0次)

image

扩展正则小结

扩展正则 含义
+ ⭐ ⭐ ⭐ ⭐ ⭐ 前一个字符连续出现1次或多次
| ⭐ ⭐ ⭐ ⭐ ⭐ 或者
() ⭐ ⭐ 🅰 表示整体 🅱 后向引用或反向引用(sed)
{} a{n,m} 前一个字符连续出现至少n次,最多m次
? 前一个字符出现0次或1次

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

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

相关文章

【凸优化笔记2】-凸函数、下水平集、范数

转自:https://zhuanlan.zhihu.com/p/102098039 1. 凸函数 1.1 凸函数定义 一个函数𝑓:𝑅𝑛→𝑅是凸的,如果定义域𝑑𝑜𝑚𝑓是凸集,并且对于所有𝑥,𝑦∈𝑑𝑜𝑚𝑓,𝜃∈[0,1],都有: 𝑓(𝜃𝑥+(1−𝜃)𝑦)≤𝜃𝑓(𝑥)+(1−𝜃)𝑓…

使用AI后为什么思考会变得困难?

使用AI后为什么思考会变得困难? 我总结了四篇近期的研究论文,来展示AI是如何以及为什么侵蚀我们的批判性思维能力。作者使用AI制作的图像前言:作者在这篇文章中,借AI技术的崛起,揭示了一场悄然发生的思想博弈。表面上,AI为我们带来了前所未有的效率与便捷,但在无形之中,…

44页太阳花绘制

点击查看代码 from turtle import * color(red, yellow) begin_fill() while True:forward(200)left(170)if abs(pos()) < 1:break end_fill() done()

leetcode hot 15

解题思路:思路还是比较清晰,先按照起始位置排序,然后再逐个遍历,根据起始位置与前一个结束位置进行比较,两种情况进行处理即可(这边代码比较麻烦因为前面list泛型用错了) import java.util.Arrays; class Solution {public int[][] merge(int[][] intervals) {List<Lis…

WgelCTF打靶笔记(2)

参考视频:https://www.bilibili.com/video/BV1itwgeHEEk/?spm_id_from=333.1387.upload.video_card.click&vd_source=e948147c25027ef3216b5c376b31fc96扫描dirb: 发现.ssh有一个id_rsa文件,即ssh连接私钥,右键下载到本地 ssh私钥: SSH:用于安全的连接到远程服务器 …

44页五角星绘制

点击查看代码 from turtle import * fillcolor("red") begin_fill() while True:forward(200)right(144)if abs(pos()) < 1:break end_fill()

Go1.24版本终于来了!各位开发者,准备好迎接这些激动人心的新功能了吗?让我们一起来探讨下Go1.24中有哪些精彩的亮点?

前言 Gopher们,Go 1.24.0 正式发布了!与 Go 1.23.0 相比,这个版本带来了众多改进。让我们一同看看 Go 1.24.0 都有哪些新变化吧! 在 Windows 下,请在 https://github.com/voidint/g/releases 下载适合您系统的版本。例如,如果您的系统是 64 位的,可以下载 g1.7.0.window…

FastAPI极速入门:15分钟搭建你的首个智能API(附自动文档生成)

title: FastAPI极速入门:15分钟搭建你的首个智能API(附自动文档生成)🚀 date: 2025/3/1 updated: 2025/3/1 author: cmdragon excerpt: 用虚拟环境打造纯净开发空间的3种方法 只需5行代码实现智能API端点 自动生成媲美大厂的交互式API文档 解决新手必踩的9大坑点(含依赖…

rocketmq不同服务使用相同消费者组和生产者组的问题

之前多个服务使用同一个消费者组和生产者组procfg-consumer-group和procfg-produce-group,然后共享同一个Topic。 时不时会有问题,例如主控服务版本更新之后虽然消息发出来了,但是终端接收不到,消息有时会有CONSUMED_BUT_FILTERED(被过滤)个人理解的原因是多个服务用同一个…

用python画了一个五星红旗

点击查看代码 import turtle# 设置屏幕 screen = turtle.Screen() screen.bgcolor("white") screen.setup(width=800, height=600) # 设置窗口大小# 设置画笔 pen = turtle.Turtle() pen.speed(10) pen.penup()# 绘制红旗背景 def draw_rectangle(color, width, hei…

gitlab使用自建nginx反向代理

参考文档:https://www.cnblogs.com/suruozhong/p/12468167.html 一、修改配置文件 vim /etc/gitlab/gitlab.rb# 让gitlab的内置nginx监听9002端口 nginx[listen_port] = 9002# 设置gitlab的访问路径(是通过外部nginx反向代理访问的) external_url http://域名/git例如: # 让…

Codeforces Round 1007 (Div. 2) 比赛记录

Codeforces Round 1007 (Div. 2) 比赛记录 比赛链接 很喜欢的一场比赛,题目质量很高,不是手速场,做出题超级有成就感,赛时切掉了 A - D1,上大分了。 B卡得有点久,其实是一个很常用的构造手法但一开始没想到。 过题记录:A. The Play Never Ends 题意大概就是,每场两个人…