Linux 正则表达式

Linux 正则表达式

文章目录

正则表达式介绍

  • 正则表达式作为一个 pattern,将 pattern 与要搜索的字符串进行匹配,以便查找一个或多个字符串。
  • 正则表达式,自成体系,由普通字符 (例如字符 a 到 z)和元字符组成的文字模式。
  • 正则表达式,工具(vim、grep、less...)和程序语言都使用正则表达式。

正则表达式分类

  • 普通正则表达式
  • 扩展正则表示,支持更多的元字符

准备环境

bash 复制代码
[root@server ~ 14:11:25]# vim words

[root@server ~ 14:13:16]# cat words
cat
category
acat
concatenate
cbt
c1t
cCt
c-t
c.t
dog

字符集

bash 复制代码
#匹配除换行符(\n、\r)之外的任何单个字符

[root@server ~ 14:12:19]# cat words | grep .
cat
category
acat
concatenate
cbt
c1t
cCt
c-t
c.t
dog

[root@server ~ 14:16:28]# cat words | grep 'cat'
cat
category
acat
concatenate

[root@server ~ 14:19:25]# cat words | grep 'c.t'
cat
category
acat
concatenate
cbt
c1t
cCt
c-t
c.t

[root@server ~ 14:19:33]# cat words | grep 'c[ab]t'
cat
category
acat
concatenate
cbt

[root@server ~ 14:19:57]# cat words | grep 'c[a-z]t'
cat
category
acat
concatenate
cbt

[root@server ~ 14:20:04]# cat words | grep 'c[A-Z]t'
cCt

[root@server ~ 14:20:14]# cat words | grep 'c[a-z0-9]t'
cat
category
acat
concatenate
cbt
c1t

[root@server ~ 14:20:23]# cat words | grep 'c[a-zA-Z0-9]t'
cat
category
acat
concatenate
cbt
c1t
cCt

[root@server ~ 14:20:46]# cat words | grep 'c[-a-zA-Z0-9]t'
cat
category
acat
concatenate
cbt
c1t
cCt
c-t

[root@server ~ 14:20:59]# cat words | grep 'c[a-zA-Z0-9-]t'
cat
category
acat
concatenate
cbt
c1t
cCt
c-t

[root@server ~ 14:21:06]# cat words | grep 'c[^ab]t'
c1t
cCt
c-t
c.t

# ^放中间会被当做普通字符

[root@server ~ 14:21:22]# cat words | grep 'c[a^b]t'
cat
category
acat
concatenate
cbt

[root@server ~ 14:21:33]# cat words | grep 'c\.t'
c.t

[root@server ~ 14:23:12]# cat words | grep 'c.t'
cat
category
acat
concatenate
cbt
c1t
cCt
c-t
c.t

# 使用egrep或者grep -E 匹配

[root@server ~ 14:23:16]# cat words | egrep 'cat|dog'
cat
category
acat
concatenate
dog

[root@server ~ 14:24:04]# cat words | grep -E 'cat|dog'
cat
category
acat
concatenate
dog
bash 复制代码
#查看十一月24日到今天的所有日志

[root@server ~ 15:13:15]# cat /var/log/messages | egrep '^Nov 2[4-9]|^Nov 30|^Dec  1'

#[[:punct:]]匹配标点符号

非打印字符

bash 复制代码
[root@server ~ 16:55:08]# cat words | grep '^cat'
cat
category

[root@server ~ 17:05:51]# cat words | grep 'cat$'
cat
acat

[root@server ~ 17:06:01]# echo hello cat kitty >> words
[root@server ~ 17:06:31]# cat words | grep '\bcat'
cat
category
hello cat kitty

[root@server ~ 17:06:43]# cat words | grep 'cat\b'
cat
acat
hello cat kitty

[root@server ~ 17:06:53]# cat words | grep '\bcat\b'
cat
hello cat kitty

[root@server ~ 17:07:00]# cat words | grep '\Bcat\B'
concatenate

[root@server ~ 17:07:14]# echo dg >> words
[root@server ~ 17:07:24]# echo doog >> words
[root@server ~ 17:07:28]# cat words | grep 'do*g'
dog
dg
doog

[root@server ~ 17:07:39]# cat words | egrep 'do+g'
dog
doog

[root@server ~ 17:07:47]# cat words | egrep 'do?g'
dog
dg

[root@server ~ 17:07:52]# cat words | egrep 'do{2}g'
doog

[root@server ~ 17:08:00]# echo dooog >> words
[root@server ~ 17:08:07]# echo doooog >> words
[root@server ~ 17:08:11]# cat words | egrep 'do{2,3}g'
doog
dooog

[root@server ~ 17:08:15]# cat words | egrep 'do{2,}g'
doog
dooog
doooog

[root@server ~ 17:08:24]# cat words | egrep 'do{,3}g'
dog
dg
doog
dooog

[root@server ~ 17:08:28]# echo dogdog >> words
[root@server ~ 17:08:51]# echo dogdogdog >> words
[root@server ~ 17:08:57]# cat words | egrep '(dog){2,3}'
dogdog
dogdogdog

综合练习

bash 复制代码
#如果所有启用的仓库都配置enabled=1

cd /etc/yum.repos.d

[root@server yum.repos.d 16:11:59]# cat *.repo | egrep -B8 -e enabled=1enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1

[root@server yum.repos.d 16:12:32]# cat *.repo | egrep -B8 -e enabled=1 | grep '^\['
[epel]

#查询/etc/profile文件中有效行
[root@server ~ 15:46:21]# cat /etc/profile | egrep -v '^\s*#|^$'

综合实验

bash 复制代码
#准备环境
[root@server ~ 16:16:26]# cat ip.list
0.0.0.0
1.1.1.1
11.11.11.111
111.111.111.111
999.9.9.9
01.1.1.1
10.0.0.0
0.1.1.1
266.1.1.1
248.1.1.1
256.1.1.1


#过滤出所有有效IPv4地址

[root@server ~ 16:17:11]# cat ip.list | egrep '\b(([1-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-4]))(\.(([1-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-4]))){3}\b'
0.0.0.0
1.1.1.1
11.11.11.111
111.111.111.111
10.0.0.0
0.1.1.1
248.1.1.1

#0-255
[root@server ~ 16:54:44]# cat ip.list | egrep '^(([1-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))(\.(([1-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))){3}$'
0.0.0.0
1.1.1.1
11.11.11.111
111.111.111.111
10.0.0.0
0.1.1.1
248.1.1.1

#可访问https://tool.chinaz.com/regex/查看更多匹配规则

10.0.0.0

0.1.1.1

248.1.1.1

#0-255

root@server \~ 16:54:44# cat ip.list | egrep '^((1-9?0-9)|(10-9{2})|(20-40-9)|(250-5))(.((1-9?0-9)|(10-9{2})|(20-40-9)|(250-5))){3}$'

0.0.0.0

1.1.1.1

11.11.11.111

111.111.111.111

10.0.0.0

0.1.1.1

248.1.1.1

#可访问https://tool.chinaz.com/regex/查看更多匹配规则

复制代码
相关推荐
Yana.nice6 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
Database_Cool_7 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
Database_Cool_8 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白8 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
DFT计算杂谈9 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
liuxiaowei310 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
Zhang~Ling10 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind10 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森10 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot11 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发