博客
关于我
#Linux杂记# grep 查找命令常用选项大全(二)
阅读量:790 次
发布时间: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/

你可能感兴趣的文章
eclipse设置utf8编码_记住没:永远不要在 MySQL 中使用 UTF8
查看>>
eclipse里source的快捷方法_Eclipse快捷键/快捷操作汇总
查看>>
elasticsearch 查询_Elasticsearch地理信息存储及查询之Geo_Point
查看>>
embedding层_【预估排序】Embedding+MLP: 深度学习预估排序通用框架(一)
查看>>
excel中最常用的30个函数_Excel玩转数据分析常用的43个函数!
查看>>
flink sql设置并行度_Flink 参数配置和常见参数调优
查看>>
go 字符串替换_Go 每日一库之 quicktemplate
查看>>
hex editor neo下载_口袋妖怪爆焰黑手机版下载-口袋妖怪爆焰黑手游下载v4.3.0 安卓版...
查看>>
hibernate mysql 关联查询_spring-boot hibernate 双向关联查询的坑
查看>>
hive 建表_sqoop的使用之导入到hive和mysql
查看>>
hp工作站z8装Linux,惠普Z8G4双路最小工作站
查看>>
html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄?
查看>>
html游戏玩不了,WinXP网页游戏玩不了怎么办有哪些解决方法
查看>>
html转jsp_JSP详解
查看>>
ICLOUD储存空间要升级吗_有人像我一样需要恢复苹果手机icloud空间ios备份时 微信卡住不动了吗(已解决)...
查看>>
image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)...
查看>>
iphone打字怎么换行_手持iPhone?你可能并不知道的小技巧!
查看>>
jaccard相似度_自然语言处理之文本相似度计算
查看>>
java http delete_java积累---HttpDelete请求方式传递参数
查看>>
java swing数据库,如何在Java swing中查看数据库结果集
查看>>