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

相关文章

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s