欢迎光临
我们一直在努力

Shell 编程之正则表达式

一、正则表达式是什么?

正则表达式(Regular Expression,简称 Regex/RE)是一种文本匹配的模式语言,可以理解为”文本搜素的高级规则‘。在Shell编程中,正则表达式常与grep、sed、awk等工具结合,用于筛选、替换、提取文本内容,比如日志分析、数据清洗、配置文件解析等场景。

Shell中常用的正则表达式分为两类:

  • 基础正则表达式(BRE):兼容 POSIX 标准,grep(默认)、sed(默认)使用,语法相对基础;
  • 扩展正则表达式(ERE):包含更多高级语法,grep -E、egrep、awk、sed -E支持,功能更强大。

二、基础匹配规则

  • 普通字符直接写字母、数字、符号,就匹配自身,比如test匹配文本里的test。

  • 任意单个字符. 匹配除换行外的任意一个字符。例:h.llo 可匹配 hello、hallo、h9llo。

  • 字符集合

    • [abc] 匹配 a、b、c 中任意一个
    • [a-z] 匹配小写字母,[0-9] 匹配数字
    • [^abc] 匹配不是a、b、c 的字符

    三、数量匹配(重复次数)

    基础正则 BRE

    • *:前面字符出现 0 次或多次
    • \\+:前面字符出现 1 次或多次
    • \\?:前面字符出现 0 次或 1 次
    • \\{n\\}:恰好 n 次
    • \\{n,\\}:至少 n 次
    • \\{n,m\\}:n~m 次

    扩展正则 ERE(更常用)

    直接去掉反斜杠:

    • *:0 次或多次
    • +:1 次或多次
    • ?:0 次或 1 次
    • {n}、{n,}、{n,m}

    示例:go+ 匹配 go、goo、gooo 等。


    四、位置锚定(限定行 / 单词)

    • ^:匹配行开头例:^root 找出以 root 开头的行
    • $:匹配行结尾例:bash$ 找出以 bash 结尾的行
    • ^$:匹配空行
    • \\< 或 \\b:匹配单词开头
    • \\> 或 \\b:匹配单词结尾

    五、分组与逻辑或

    基础正则

    • `内容``:分组,把一串字符当整体
    • \\|:或者

    例:\\(hello\\)\\|world 匹配 hello 或 world

    扩展正则

    • (内容):分组
    • |:或者

    例:(hello)|world


    六、Shell 中最常用组合

  • 过滤非空行
  • bash

    运行

    grep -v "^$" 文件名

  • 过滤注释行 + 空行
  • bash

    运行

    grep -v "^#" 文件名 | grep -v "^$"

  • 匹配手机号(简单示例)
  • bash

    运行

    grep -E "^1[3-9][0-9]{9}$" 文件名

  • 提取 IP 地址
  • bash

    运行

    grep -E "([0-9]{1,3}\\.){3}[0-9]{1,3}" 文件名


    七、小结

    • 正则 = 字符规则 + 数量规则 + 位置规则
    • Shell 里优先用 grep -E 写扩展正则,更简单
    • 核心用途:查找、过滤、替换、校验格式
    赞(0)
    未经允许不得转载:171主机测评 » Shell 编程之正则表达式
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址