Shell 编程 —— 正则表达式与文本处理器

1. 正则表达式

1.1 定义

正则表达式(Regular Expression, regex/regexp/RE)是一种用来描述字符串模式的规则,用于检索、替换、过滤符合特定规则的字符串。

1.2 用途

  • 系统日志筛选(如定位“登录失败”“服务启动失败”)

  • 配置文件解析

  • 文本查找替换

  • 脚本编程中的条件匹配

1.3 Linux 正则表达式分类

  1. BRE(基础正则表达式)

    • 传统语法,功能有限

    • 量词 {} 需要转义 \{n,m\}

    • +?() 需要转义

    • 常用工具:grepsed

  2. ERE(扩展正则表达式)

    • 功能更强大,语法简洁

    • +?(){}| 等无需转义

    • 常用工具:egrep (grep -E)、awk

1.4 正则表达式组成

1.4.1 普通字符

字母、数字、标点符号等本身。

1.4.2 元字符
  • .:匹配任意单个字符(除 \r\n

  • []:匹配字符集,如 [a-z][0-9]

  • [^list]:匹配非集合中的字符

  • ^:行首

  • $:行尾

  • \:转义符,用于去除其后字符的特殊意义

1.4.3 重复次数
  • *:匹配前面的子表达式0 次或多次

  • \+:匹配前面的子表达式至少 1 次

  • \{n\}:匹配前面的子表达式恰好 n 次

  • \{m,n\}:匹配前面的子表达式m 到 n 次

  • \{n,\}:匹配前面的子表达式至少 n 次

扩展功能(ERE)
  • +:一个或多个

  • ?:0 或 1 次

  • |:或者(OR)

  • ():分组

  • ()+:匹配重复的组

2. grep —— 条件查找

常用选项

  • -E:启用扩展正则

  • -c:统计匹配行数

  • -i:忽略大小写

  • -o:只输出匹配内容

  • -v:反向匹配(不包含的行)

  • -n:显示行号

  • --color=auto:高亮匹配

示例

bash

grep -c root /etc/passwd       # 统计 root 出现的行数
grep -i "the" web.sh           # 不区分大小写匹配
grep -v root /etc/passwd       # 输出不包含 root 的行
grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+' ifconfig.out | head -1 # 提取 IP 地址

3. 基础正则 vs 扩展正则

BRE 常见元字符

  • ^:行首

  • $:行尾

  • .:任意单字符

  • [list]:匹配字符集

  • [^list]:反向匹配

  • *:0 或多次

  • \{n\}:精确次数

  • \{n,\}:至少 n 次

  • \{n,m\}:n~m 次

ERE 新增功能

  • +:一个或多个

  • ?:0 或 1 次

  • |:或者(OR)

  • ():分组

  • ()+:匹配重复的组

4. 元字符操作案例

  1. 查找特定字符

    bash

    grep -n 'the' test.txt       # 查找 the
    grep -vn 'the' test.txt      # 反向匹配

  2. 中括号集合

    bash

    grep -n 'sh[io]rt' test.txt  # shirt 或 short
    grep -n '[^w]oo' test.txt    # 前面不是 w 的 oo

  3. 定位符

    bash

    grep -n '^the' test.txt      # 行首是 the
    grep -n '\.$' test.txt       # 行尾是 .
    grep -n '^$' test.txt        # 空行
  4. 点与星

    bash

    grep -n 'w..d' test.txt      # w 开头 d 结尾,中间两个字符
    grep -n 'woo*d' test.txt     # w 开头 d 结尾,中间 o 可有可无
    grep -n 'w.*d' test.txt      # w 开头 d 结尾,中间任意字符
    grep -n '[0-9][0-9]*' test.txt # 任意数字所在行
  5. 次数限定符

    bash

    grep -n 'o\{2\}' test.txt        # oo
    grep -n 'wo\{2,5\}d' test.txt    # w 开头 d 结尾,2-5 个 o
    grep -n 'wo\{2,\}d' test.txt     # 至少两个 o

5. 总结

正则表达式是一种用于描述字符串模式的规则,广泛应用于文本检索、替换和过滤。

掌握基础元字符(如 ^$.\*[][^]{n}{n,}{n,m})及其在 BRE 和 ERE 中的差异,是高效使用文本处理工具(如 grepsedawk)的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值