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

linux正则匹配

在 Linux 系统中,正则表达式(Regular Expression)广泛用于文本搜索、匹配和处理,常见工具如grepsedawk等都依赖正则匹配。正则表达式通过元字符(特殊符号)定义匹配规则,根据工具支持程度分为基础正则(BRE) 和扩展正则(ERE)

一、基础正则(BRE,Basic Regular Expressions)

基础正则是多数工具的默认模式(如grepsed默认),核心元字符及含义如下:

元字符含义示例
.匹配任意单个字符(除换行符\na.b 匹配 aabacba-b 等(中间任意 1 个字符)
*匹配前面的字符0 次或多次(贪婪匹配)a*b 匹配 b(a 出现 0 次)、ab(a1 次)、aaab(a3 次)等
^匹配行首(开头位置)^root 匹配以 root 开头的行(如root:x:0:0:...
$匹配行尾(结尾位置)bash$ 匹配以 bash 结尾的行(如user:x:1000:1000:.../bin/bash
[]匹配字符集中的任意一个字符(范围用-,如[a-z][0-9][Rr]oot 匹配 Root 或 root[0-9] 匹配任意数字
[^]匹配不在字符集中的任意一个字符(反向匹配)[^0-9] 匹配非数字字符;[^a-zA-Z] 匹配非字母字符
\< / \b匹配单词开头(单词边界,仅对字母 / 数字 / 下划线组成的 “单词” 有效)\<test 匹配以 test 开头的单词(如test123不匹配,test abc匹配)
\> / \b匹配单词结尾(单词边界)test\> 匹配以 test 结尾的单词(如mytest匹配,test123不匹配)
\(` `\)分组(将部分表达式视为整体,需转义)\(ab\)* 匹配 ab 整体重复 0 次或多次(如abab、空)
\n反向引用(引用第 n 个分组的内容,n 为 1-9)sed 's/\(hello\) world/\1 there/' 替换 hello world 为 hello there(\1 引用分组 1 的hello

二、扩展正则(ERE,Extended Regular Expressions)

扩展正则在基础正则上增加了更多元字符,且无需转义(部分工具需加选项启用,如grep -Esed -r)。核心元字符如下:

元字符含义示例
+匹配前面的字符1 次或多次(比*更严格,至少 1 次)a+b 匹配 abaab 等(a 至少 1 次),不匹配 b
?匹配前面的字符0 次或 1 次(可选)a?b 匹配 b(a0 次)或 ab(a1 次),不匹配 aab
``逻辑 “或”,匹配左右任意一个表达式`catdog匹配catdog(ab)c匹配acbc`
()分组(无需转义,功能同基础正则的\(\)(ab)+ 匹配 ab 重复 1 次或多次(如ababab
{n}匹配前面的字符恰好 n 次(n 为正整数)a{3} 匹配 aaa(a 恰好 3 次)
{n,}匹配前面的字符至少 n 次a{2,} 匹配 aaaaa 等(a 至少 2 次)
{n,m}匹配前面的字符n 到 m 次(n≤m)a{2,4} 匹配 aaaaaaaaa(a2-4 次)

三、常用工具的正则支持

不同工具对正则的支持略有差异,需注意选项:

  1. grep

    • 默认支持基础正则
    • 加 -E 选项(或用 egrep)启用扩展正则
    • 示例:

      bash

      grep '^root' /etc/passwd  # 基础正则:匹配以root开头的行
      grep -E 'a{2,3}' file     # 扩展正则:匹配a连续出现2-3次的内容
      
  2. sed

    • 默认支持基础正则
    • 加 -r 选项启用扩展正则
    • 示例:

      bash

      sed 's/old.*/new/' file   # 基础正则:替换以old开头的行为new
      sed -r 's/(a|b)c/X/' file # 扩展正则:替换ac或bc为X
      
  3. awk

    • 内置支持扩展正则(无需选项),用 ~ 表示匹配;
    • 示例:

      bash

      awk '/^[0-9]+$/' file  # 匹配全为数字的行
      awk '$1 ~ /(user|admin)/' file  # 第一列包含user或admin的行
      

四、注意事项

  • 区分正则与通配符:正则用于文本内容匹配(如grep),通配符(*?等)用于文件名匹配(如ls *.txt),两者规则不同。
  • 转义问题:基础正则中,+?|(){} 需用 \ 转义才能表示特殊含义;扩展正则中无需转义。
  • 贪婪匹配*+ 等默认是贪婪的(尽可能匹配最长内容),部分工具(如grep -P支持 Perl 正则)可通过 ? 实现非贪婪(如.*?)。
http://www.dtcms.com/a/601218.html

相关文章:

  • 【1.9】基于FPGA的costas环开发3——解调端低通滤波器模块
  • C语言编译器及其优化技术
  • 外国网站建站中国招商网
  • 自己建的网站也要注册域名吗wordpress云主机
  • 用 ssldump 跟踪 tls 问题
  • 《网络安全法》完成修改,AI安全正式“入法”
  • 算法笔记17 - 贪心算法介绍与思路 | 路灯摆放问题 | 活动安排问题 | 最低字典序拼接 | 金条分割问题 | 项目投资问题
  • CentOS系统一键安装Memcached教程
  • 构建本质安全:现代智能消防的物联网架构深度解析
  • 筑牢API安全防线
  • openssl自动升级(下载git相关)~~坑点
  • 用源代码做网站注册网站代码
  • 个人博客网站logo网络营销推广形式
  • 【计网】基于三层交换机的多 VLAN 局域网组建
  • Python键盘鼠标自动化库详解:从入门到精通
  • Prompt-R1:重新定义AI交互的「精准沟通」范式
  • 郑州国外网站建设克拉玛依市建设局网站
  • 国产化中间件东方通TongWeb环境安装部署(图文详解)
  • 防爆六维力传感器的本质安全,破解高危环境自动化难题
  • 达内网站开发做网站费用会计分录
  • 深圳营销型网站建设公司网络服务php网站开发打不开
  • GIT版本管理工具轻松入门 | TortoiseGit,Git 介绍软件安装配置,笔记01
  • Flutter中Column中使用ListView时溢出问题的解决方法
  • Linux 传输层协议
  • 攻防世界-Misc-适合作为桌面
  • STM32F103VET6开发板例程(一)-LED
  • 上海网站优化推广公司阿里云网站建设方案书
  • 基于Water Physics在Unreal Engine中实现水系统模拟与物体漂浮状态模拟
  • Qt-自定义按钮动画
  • llm course 5.6 学习笔记 同样的文本 模型输出的固定向量和计算出来的哈希值为什么携带的信息不同