博客
关于我
#Linux杂记# grep 查找命令常用选项大全(二)
阅读量:788 次
发布时间:2023-01-24

本文共 2054 字,大约阅读时间需要 6 分钟。

Grep 与 正则表达式 高级使用技巧

1. Grep + 元字符

元字符是正则表达式中的特殊字符,它们能够帮助我们对文本进行更精确的匹配。

  • .:匹配任意单个字符,但不包括换行符 [\n]

    例:grep -E "system.*verilog" grep.log 可以匹配中间包含任意多个字符的文本。

  • *:前面那个字符匹配0次或更多次。

    例:grep -E "system.*verilog" grep.log 能够匹配包含多个字符的文本。

  • ?:前面那个字符匹配0次或1次。

    例:grep -E "system.?verilog" grep.log 可以匹配包含0个或1个任意字符的文本。

  • +:前面那个字符匹配1次或更多次。

    例:grep -E "system.+verilog" grep.log 能够匹配前面字符至少出现一次的文本。

  • {M,N}:前面那个字符匹配至少M次,最多N次。

    例:grep -E "system.{5,20}verilog" grep.log 可以匹配5到20个字符的文本。

  • {M,}:前面那个字符至少M次,无上限。

    例:grep -E "system.{5,}verilog" grep.log 可以匹配5次或更多的字符。

  • {,N}:前面那个字符最多N次(至少0次)。

    例:grep -E "system.{,10}verilog" grep.log 可以匹配0到10个字符的文本。

  • {M}:前面那个字符正好匹配M次。

    例:grep -E "system{3}verilog" grep.log 只能匹配正好3个字符的文本。

  • 锚定字符

    • ^:匹配行首位置。
    • $:匹配行尾位置。

    例:grep -E "^system Boulder $verilog" grep.log 可以匹配开头为 "system ",结尾为 "verilog " 的行。

2. Grep + 中括号

中括号用于创建字符类,用于匹配一组字符中的任意一个字符。

  • 普通字符集

    • [abcd...] 匹配任意一个大写字母或数字。
    • [^abcd...] 匹配不在字符集中的任意字符。

    例:grep -E "system[D]verilog" grep.log 可以匹配包含 "D" 的文本。

  • 具体字符类

    • [A-Z] 匹配大写字母。
    • [a-z] 匹配小写字母。
    • [0-9] 匹配数字。
    • [[:alnum:]] 匹配字母或数字。

    例:grep -E "system[[:alpha:]]verilog" grep.log 可以匹配包含一个字母的文本。

3. Grep + 字符类

字符类提供了一种更简洁的方式来定义字符集合,适用于常用的字符类。

  • 常用字符类:

    • [:alpha:]:字母([a-zA-Z])。
    • [:digit:]:数字([0-9])。
    • [:xdigit:]:十六进制数字([0-9a-fA-F])。
    • [:upper:]:大写字母([A-Z])。
    • [:lower:]:小写字母([a-z])。
    • [:alnum:]:字母或数字([[:alpha:]][[:digit:]])。
    • [:blank:]:空白字符。
    • [:space:]:所有空白字符(包括换行符)。
    • [:punct:]:标点符号。
    • [:graph:]:字母、数字和标点符号。
    • [:print:]:字母、数字、标点符号和空格。

    例:grep -E "system[[:lower:]]verilog" grep.log 可以匹配包含小写字母的文本。

4. Grep + 反斜线序列

反斜线序列是正则表达式中的特殊序列,它们扩展了匹配能力。

  • 常用反斜线序列:

    • \b:单词边界。
    • \w:单词字符([[:alnum:]])。
    • \W:非单词字符。
    • \s:空白字符。
    • \S:非空白字符。
    • \d:数字。
    • \D:非数字。

    例:grep -E "\d{3}" file 可以匹配包含三个数字的文本。

5. Grep + 分组捕获和反向引用

分组捕获允许我们将匹配文本存储起来,并在正则表达式中使用反向引用。

  • 创建分组:

    • 换用括号 () 将需要反向引用的文本包围起来。
  • 反向引用:

    • \1:第一个分组。
    • \2:第二个分组。
    • \N:最后一个分组。

    例:grep -E "(.)\1" file 可以匹配两个相同的字符。

  • 注意事项:

    • 竖线 | 导致分组断开,右侧分组无法引用左侧。
    • 基础grep工具通常只支持到9个反向引用。

6. Grep + 二选一结构

在正则表达式中,使用竖线 | 可以实现“或”匹配,但需要注意以下几点:

  • 左边匹配后就不会再去匹配右边。

  • 二选一结构适用于需要两种不同的正则表达式来匹配不同的情况。

    例:grep -E "system[a-z]verilog|system[0-9]verilog" file 可以匹配包含字母或数字的文本。

通过对以上内容的深入理解和实践,你可以显著提升使用grep和正则表达式的能力,将文本处理变得更加高效和精准。

转载地址:http://xxeyk.baihongyu.com/

你可能感兴趣的文章
python入门到秃顶(10):异常
查看>>
百度背景换肤案例
查看>>
输出对象的值——踩坑
查看>>
在苹果Mac上如何更改AirDrop名称?
查看>>
springboot redis key乱码
查看>>
【转载】DSP基础--定点小数运算
查看>>
idea thymeleaf页面变量报错解决
查看>>
wxwidgets自定义事件+调试
查看>>
Unable to run Intel® HAXM installer: 无法启动过程,工作目录
查看>>
Vue.js学习-15-v-for循环数组内容
查看>>
kafka超时错误或者发送消息失败等错误,排错方式
查看>>
sockjs-node/info?t=1462183700002 报错解决方案
查看>>
网络协议和支持(一)、uuid模块
查看>>
Latex 错误集合
查看>>
浏览器打开winscp 系统错误。代码:5。 拒绝访问。
查看>>
Kubernetes 无法查询到并且无法删除pod实例的排查过程
查看>>
android中button修改不了背景颜色
查看>>
github 入门
查看>>
温故知新,.Net Core遇见Consul(HashiCorp),实践分布式服务注册与发现
查看>>
社区医疗app-Ui设计
查看>>