Shell编程:正则表达式(位置锚定、分组或者、扩展正则)

2024-09-04 11:12

本文主要是介绍Shell编程:正则表达式(位置锚定、分组或者、扩展正则),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

  • 正则表达式 2
    • 位置锚定
      • 行锚定
      • 单词锚定
      • 示例
    • 分组与其他
      • 分组
      • 或者
      • 示例
    • 扩展正则表达式
      • 表示次数
      • 表示分组
      • 示例


正则表达式 2

位置锚定

行锚定

  • ^ 行首锚定:用于模式的最左侧,表示匹配行首。
  • $ 行尾锚定:用于模式的最右侧,表示匹配行尾。

示例:

  • ^root$ 匹配整行,只有 “root” 的行。
  • ^$ 匹配空行。
  • ^[[:space:]]*$ 匹配空白行。

单词锚定

  • \<\b 词首锚定:用于单词模式的左侧,表示匹配词首(单词由连续的字母、数字、下划线组成)。
  • \>\b 词尾锚定:用于单词模式的右侧,表示匹配词尾。

示例:

  • \<root\> 匹配整个单词 “root”。

示例

  1. 过滤出不是以 # 号开头的非空行:

    grep "^[^#]" /etc/fstab
    
  2. 匹配整行内容为 “google” 的行:

    grep "^google$" test.txt
    
  3. 匹配空白行:

    grep "^[[:space:]]*$" /etc/fstab
    
  4. 匹配以单词 “123” 开头的字符串:

    echo hello-123 | grep "\b123"
    
  5. 匹配单词 “hello” 的字符串:

    echo hello-123 | grep "\bhello"
    
  6. 匹配以 “o-123” 为词首的字符串(匹配不到,因为 “o” 不是词首):

    echo hello-123 | grep "\bo-123"
    

分组与其他

分组

  • () 用于将多个字符捆绑在一起,当作一个整体处理。

或者

  • \| 用于表示逻辑“或”。

示例

  1. 匹配字符 c 出现 3 次的字符串:

    echo abccc | grep "abc\{3\}"
    
  2. 匹配字符串 “abcabcabc” 中的 “abc” 出现 3 次:

    echo abcabcabc | grep "\(abc\)\{3\}"echo abcabcabc | grep "\(ab\)\{3\}" 
    #不能匹配,因为要连续的出现才能匹配
    
  3. 匹配字符串 “golgogle” 中的 “go” 出现 1 次:

    echo golgogle | grep '\(go\)\{1\}'echo golgogle | grep  '\(go\)\{1\}gle' 
    #只能匹配后面的 golgogle
    
  4. 匹配字符串 “1abc” 中的字符 “1” 或 “2abc”:

    echo 1abc | grep "1\|2abc"
    
  5. 匹配字符串 “1abc2abc” 中的 “1abc” 或 “2abc”:

    echo 1abc2abc | grep "\(1\|2\)abc"
    

扩展正则表达式

扩展正则表达式可以使用 grep -Eegrep,或使用 sed -r。可以省去转义符 \ ,点 . 仍需要转义。(表示字符相差不大)

表示次数

  • * 匹配前面的字符任意次。
  • ? 匹配前面的字符 0 或 1 次。
  • + 匹配前面的字符 1 次或多次。
  • {n} 匹配前面的字符 n 次。
  • {m,n} 匹配前面的字符至少 m 次,至多 n 次。
  • {,n} 匹配前面的字符至多 n 次,n 可以为 0。
  • {n,} 匹配前面的字符至少 n 次,n 可以为 0。

表示分组

  • () 用于分组,将多个字符捆绑在一起。

  • | 用于表示逻辑“或”。

    a|b     #a或b
    C|cat   #C或cat
    (C|c)at #Cat或cat
    

示例

  1. 匹配 IP 地址:

    ifconfig ens33 | grep netmask | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'
    
  2. 匹配电话号码:

    grep -E "[0-9]+-[0-9]+" number.txt
    

    输出示例:

    025-83346023
    0510-8776655
    0527-9888899
    
  3. 匹配邮箱地址:

    echo "544564317@qq.com" | grep -E "[0-9]+@[a-z]+\.[a-z]+"
    
  4. 匹配手机号:

    echo "13770725194" | grep -E "\b1[3456789][0-9]{9}\b"
    
  5. 匹配邮箱地址(包括大小写字母):

    echo "CICIfireway@163.com" | grep -E "[a-zA-Z]+@[0-9]+\.[a-z]+"
    
  6. 匹配混合字符的邮箱地址:

    grep -E "[a-zA-Z0-9]+@[0-9a-z]+\.[a-z]+" email.txt
    
  7. 匹配美国电话号码:

    grep -E '^(\([0-9]+\)|[0-9]+)[ -]?[0-9]+[ -]?[0-9]+' file.txt
    

    文件内容示例:

    987-123-4567
    987 456-1230
    (123) 456-7890
    

这篇关于Shell编程:正则表达式(位置锚定、分组或者、扩展正则)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135860

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面