Linux grep 命令的正则表达式使用指南

grep 是 Linux 中用于文本搜索的强大工具,结合正则表达式(Regular Expression)可以实现复杂的模式匹配。以下是常见的正则表达式语法及示例:


1. 基本匹配

  • 语法:直接匹配文本中的字符串。

    bash

    Copy

    grep "hello" file.txt  # 匹配包含 "hello" 的行

2. 行首/行尾

  • ^:匹配行首。

  • $:匹配行尾。

    bash

    Copy

    grep "^start" file.txt  # 匹配以 "start" 开头的行
    grep "end$" file.txt    # 匹配以 "end" 结尾的行
    grep "^$" file.txt      # 匹配空行(行首后直接接行尾)

3. 任意字符

  • .:匹配任意单个字符(除换行符)。

    bash

    Copy

    grep "a.c" file.txt  # 匹配如 "abc", "a2c", "a-c" 等

4. 字符集合

  • [ ]:匹配集合中的任意一个字符。

  • [^ ]:匹配不在集合中的任意一个字符。

    bash

    Copy

    grep "gr[ae]y" file.txt    # 匹配 "gray" 或 "grey"
    grep "[0-9]" file.txt      # 匹配包含数字的行
    grep "[^a-z]" file.txt     # 匹配包含非小写字母的字符

5. 量词(重复次数)

  • *:前一个字符出现 0 次或多次。

  • +:前一个字符出现 1 次或多次(需用 -E 启用扩展正则)。

  • ?:前一个字符出现 0 次或 1 次(需用 -E)。

  • {n,m}:前一个字符出现 n 到 m 次。

    bash

    Copy

    grep "go*gle" file.txt     # 匹配 "ggle", "gogle", "google" 等
    grep -E "go+gle" file.txt  # 匹配 "gogle", "google" 等(不匹配 "ggle")
    grep -E "colou?r" file.txt # 匹配 "color" 或 "colour"
    grep -E "a{2,4}" file.txt  # 匹配 "aa", "aaa", "aaaa"

6. 分组与或操作

  • ( ):分组(需用 -E)。

  • |:逻辑“或”(需用 -E)。

    bash

    Copy

    grep -E "(apple|banana)" file.txt  # 匹配 "apple" 或 "banana"
    grep -E "(abc)+" file.txt          # 匹配 "abc", "abcabc" 等

7. 转义字符

  • \:转义特殊字符(如 .*$ 等)。

    bash

    Copy

    grep "3\.14" file.txt      # 匹配 "3.14"(避免被解析为 `.` 的通配符)
    grep "\\$10" file.txt      # 匹配 "$10"(转义 $)

8. 预定义字符类

  • \d:数字(需用 -P 启用 Perl 正则,部分系统支持)。

  • \w:单词字符(字母、数字、下划线)。

  • \s:空白字符(空格、制表符等)。

    bash

    Copy

    grep -P "\d{3}" file.txt   # 匹配连续 3 个数字(如 "123")
    grep -P "\w+" file.txt     # 匹配单词(如 "hello_123")

9. 单词边界

  • \b:匹配单词的边界。

    bash

    Copy

    grep "\bcat\b" file.txt    # 匹配独立单词 "cat",不匹配 "category"

10. 反向引用

  • \n:引用前面的分组(需用 -E 或 -P)。

    bash

    Copy

    grep -E "(abc)\1" file.txt  # 匹配 "abcabc"(分组 "abc" 重复一次)

示例综合应用

匹配 IP 地址:

bash

Copy

grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt
# 匹配如 "192.168.1.1"
匹配邮箱地址:

bash

Copy

grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt
# 匹配如 "user@example.com"

常用选项:

  • -i:忽略大小写。

  • -v:反向匹配(显示不匹配的行)。

  • -o:仅输出匹配的部分。

  • -E:启用扩展正则表达式(支持 +?| 等)。

  • -P:启用 Perl 兼容正则(支持 \d\w 等)。

掌握这些正则表达式技巧后,grep 会成为你处理文本数据的利器!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大小小聪明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值