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

Linux 正则表达式

环境准备

[lyk@controller ~ 15:21:03]$ mkdir lab[lyk@controller ~ 15:21:08]$ cd lab[lyk@controller lab 15:21:11]$ vim wordscatcategoryacatconcatenatedog​​

普通字符

[lyk@controller lab 15:21:36]$ cat words |grep 'cat'catcategoryacatconcatenate

字符集[...]

匹配 [...] 中的任意一个字符。

[lyk@controller lab 15:22:07]$ echo cbt >> words [lyk@controller lab 15:22:57]$ echo c1t >> words[lyk@controller lab 15:23:02]$ cat words | grep 'c[ab]t'catcategoryacatconcatenatecbt
[a-z] [A-Z] [0-9]
  • [a-z],匹配所有小写字母。

  • [A-Z],匹配所有大写字母。

  • [0-9],匹配所有数字。

[lyk@controller lab 15:23:11]$ cat words | grep 'c[a-z]t'catcategoryacatconcatenatecbt​[lyk@controller lab 15:23:38]$ echo cCt >> words [lyk@controller lab 15:23:52]$ cat words | grep 'c[A-Z]t'cCt​[lyk@controller lab 15:23:58]$ cat words | grep 'c[0-9]t'c1t[lyk@controller lab 15:24:12]$ cat words | grep 'c[a-z0-9]t'catcategoryacatconcatenatecbtc1t[lyk@controller lab 15:24:17]$ cat words | grep 'c[a-zA-Z0-9]t'catcategoryacatconcatenatecbtc1tcCt​​# 要想匹配-符号,将改符号写在第一个位置[lyk@controller lab 15:24:27]$ echo c-t >> words [lyk@controller lab 15:25:02]$ cat words | grep 'c[-a-zA-Z0-9]t'catcategoryacatconcatenatecbtc1tcCtc-t

匹配除了 [...] 中字符的所有字符。

[lyk@controller lab 15:25:07]$ cat words | grep 'c[^ab]t'c1tcCtc-t​​# ^放中间会被当做普通字符[lyk@controller lab 15:25:41]$ cat words | grep 'c[a^b]t'catcategoryacatconcatenatecbt​

. 匹配除换行符(\n\r)之外的任何单个字符,相等于\[^\n\r]

[lyk@controller lab 15:26:03]$ cat words | grep 'c.t'catcategoryacatconcatenatecbtc1tcCtc-t​

\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

[lyk@controller lab 15:26:35]$ echo c.t >> words [lyk@controller lab 15:27:05]$ cat words | grep 'c\.t'c.t​# 匹配普通字符,虽然可以匹配,但强烈建议不要在前面加\[lyk@controller lab 15:27:09]$ cat words | grep 'c\at'catcategoryacatconcatenate​

| 符号是扩展表达式中元字符,指明两项之间的一个选择。要匹配 |,请使用 \|

# 使用egrep或者grep -E 匹配[lyk@controller lab 15:27:23]$ cat words | egrep 'cat|dog'catcategoryacatconcatenatedog#或者[lyk@controller lab 15:27:57]$ cat words | grep -E 'cat|dog'catcategoryacatconcatenatedog​

非打印字符

终端中不显示的字符,例如换行符。

字符描述
\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f匹配一个换页符。等价于 \x0c\cL
\n匹配一个换行符。等价于 \x0a\cJ
\r匹配一个回车符。等价于 \x0d\cM
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\W匹配任何非单词字符。等价于[^A-Za-z0-9_]
\t匹配一个制表符。等价于 \x09\cI
\v匹配一个垂直制表符。等价于 \x0b\cK

grep 命令支持\w\W\s\S

定位符^ 匹配行首位置

[lyk@controller lab 15:28:07]$ cat words | grep '^cat'
cat
category

$匹配行末位置

[lyk@controller lab 15:29:33]$ cat words | grep 'cat$'
cat
acat
[lyk@controller lab 15:29:58]$ cat words | grep '^cat$'
cat#查看/etc/profile文件中有效行
[lyk@controller lab 15:35:10]$ cat /etc/profile | egrep -v '^#|^$'#-v取反,不显示匹配内容#查看 /etc/ansible/ansible.cfg有哪些section
[lyk@controller lab 15:41:34]$ cat /etc/ansible/ansible.cfg | egrep '^\['
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]#查看/var/log/message Aug 19 14:01 到 Aug 19 14:09 日志

\b 匹配一个单词边界

[lyk@controller lab 15:30:02]$ echo hello cat >> words 
[lyk@controller lab 15:30:26]$ cat words | grep '\bcat'
cat
category
hello cat
[lyk@controller lab 15:30:31]$ cat words | grep 'cat\b'
cat
acat
hello cat
[lyk@controller lab 15:30:37]$ cat words | grep '\bcat\b'
cat
hello cat

\B 非单词边界匹配

[lyk@controller lab 15:30:41]$ cat words | grep '\Bcat'
acat
concatenate
\< 和 \>
  • \< ,匹配一个单词左边界

  • \>,匹配一个单词右边界

[lyk@controller lab 15:31:05]$ cat words | grep '\<cat'
cat
category
hello cat
[lyk@controller lab 15:31:27]$ cat words | grep 'cat\>'
cat
acat
hello cat

限定次数*

匹配前面的子表达式任意次数

[lyk@controller lab 15:31:32]$ echo dg >> words 
[lyk@controller lab 15:32:02]$ echo doog >> words 
[lyk@controller lab 15:32:06]$ cat words | grep 'do*g'
dog
dg
doog

+ 是扩展表达式元字符,匹配前面的子表达式一次以上次数

[lyk@controller lab 15:32:10]$ cat words | egrep 'do+g'
dog
doog

? 是扩展表达式元字符,匹配前面的子表达式一次以下次数

[lyk@controller lab 15:32:38]$ cat words | egrep 'do?g'
dog
dg

{} 是扩展表达式元字符,用于匹配特定次数。例如:{n},配置n次

[lyk@controller lab 15:33:03]$ cat words | egrep 'do{2}g'
doog

{m,n},是扩展表达式元字符,用于匹配次数介于m-n之间

[lyk@controller lab 15:33:24]$  echo dooog >> words
[lyk@controller lab 15:33:41]$ echo doooog >> words 
[lyk@controller lab 15:33:45]$ cat words | egrep 'do{2,3}g'
doog
dooog

{m,},是扩展表达式元字符,匹配前面的子表达式m次以上次数

[lyk@controller lab 15:33:49]$ cat words | egrep 'do{2,}g'
doog
dooog
doooog

{,n},是扩展表达式元字符,匹配前面的子表达式n次以下次数

[lyk@controller lab 15:34:11]$ cat words | egrep 'do{,3}g'
dog
dg
doog
dooog

() 标记一个子表达式

[lyk@controller lab 15:34:33]$ echo dogdog >> words 
[lyk@controller lab 15:34:52]$ echo dogdogdog >> words 
[lyk@controller lab 15:34:56]$ echo dogdogdogdog >> words 
[lyk@controller lab 15:35:00]$ cat words | egrep '(dog){2,3}'
dogdog
dogdogdog
dogdogdogdog
[lyk@controller lab 15:35:05]$ cat words | egrep '(dog){2,}'
dogdog
dogdogdog
dogdogdogdog
http://www.dtcms.com/a/338949.html

相关文章:

  • 【新启航】航空飞机起落架深孔型腔的内轮廓检测方法探究 - 激光频率梳 3D 轮廓检测
  • JavaScript 性能优化:new Map vs Array.find() 查找速度深度对比
  • 机器翻译60天修炼专栏介绍和目录
  • C语言:字符函数与字符串函数(1)
  • 从 IP编码地址困局到网络优化:VLSM 与 CIDR 如何破解地址浪费与路由难题
  • 使用 Resilience4j 实现 Spring Boot 服务限流:轻量级容错的最佳实践
  • Java算法之排序
  • Bot 流量“假阳性”调优笔记
  • ListBoxes使得在专为灵活性和易用性设计
  • 消费者API
  • 云电脑 vs 传统PC:全面对比3A游戏与AI训练的成本与性能
  • Leetcode 3654. Minimum Sum After Divisible Sum Deletions
  • 【多模态大模型的三化】
  • [PV]AXI R/W/RW带宽计算的tcl脚本
  • AI赋能商业数据分析:从海量数据挖掘到智能决策洞察,激活企业增长新动能
  • Redisson 分布式锁核心机制解析
  • Flink原理与实践:第一章大数据技术概述总结
  • 微软行业案例:英格兰足球超级联赛(Premier League)
  • 丝杆支撑座在自动化生产线中的关键支撑
  • arcgis-提取范围中最大占比面积的信息或唯一值
  • Jenkins服务器SSH公钥配置步骤
  • nodejs koa框架使用
  • 计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】
  • 《算法导论》第 30 章:多项式与快速傅里叶变换(FFT)
  • vue3中封装hooks
  • uniapp 应用未安装:软件包与现有软件包存在冲突
  • GEO 优化专家孟庆涛:技术破壁者重构 AI 时代搜索逻辑
  • Flask 路由与视图函数绑定机制
  • 正式签约 | OpenLoong 项目正式捐赠至开放原子开源基金会,成为全国首个具身智能方向孵化项目!
  • 【图像算法 - 18】慧眼辨良莠:基于深度学习与OpenCV的麦田杂草智能识别检测系统(附完整代码)