shell进阶之正则表达式:字符转义(十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.正则表达式介绍
    • 🌻3.字符转义实操
      • 🐓3.1 转义:"->data"字段
      • 🐓3.2 问题:以上的"->data"字段中,为什么"-"需要转义,而">"不需要转义?
      • 🐓3.3 转义:"->data()"字段

🌻1.前言

本篇目的:shell进阶之搜索:正则表达式字符转义

🌻2.正则表达式介绍

  • Shell脚本中的正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它通过特定的模式匹配规则来搜索、替换、查找和操作字符串。正则表达式在Shell脚本中的应用非常广泛,例如在处理日志文件、文本数据、配置文件等方面。然而,正则表达式中包含了一些特殊字符,这些特殊字符在正则表达式中有特殊的意义和用途。当我们在Shell脚本中使用正则表达式时,有时需要对这些特殊字符进行转义,以避免它们被误解为正则表达式的特殊含义。
  • 在Shell脚本中,常见的需要转义的特殊字符包括:
1. `.*[]^${}\+?|()
2. |
这些特殊字符在正则表达式中有特定的含义,例如:
- `.`:匹配除换行符以外的任意字符。
- `*`:匹配前面的子表达式零次或多次。
- `+`:匹配前面的子表达式一次或多次。
- `?`:匹配前面的子表达式零次或一次。
- `^`:匹配输入字符串的开始位置。
- `$`:匹配输入字符串的结束位置。
- `[ ]`:匹配方括号内的任意一个字符(字符集)。
- `[^ ]`:匹配不在方括号内的任意一个字符(否定字符集)。
- `\`:转义符,用于转义特殊字符,使其失去特殊含义。
- `|`:匹配两个或多个分支表达式中的任意一个。
  • 在Shell脚本中,如果我们要在正则表达式中使用这些特殊字符的字面意义,就需要使用反斜杠(\)对这些特殊字符进行转义。
  • 例如,如果我们想要匹配一个字符串中的点(.)字符,我们可以在点前面加上反斜杠(\)进行转义,如下所示:
grep '\.' filename
  • 在上面的例子中,我们使用了grep命令来搜索文件filename中包含点(.)字符的行。由于点(.)在正则表达式中有特殊的含义,因此我们需要使用反斜杠(\)对其进行转义,使其失去特殊含义,仅表示一个普通的点(.)字符。
  • 总之,Shell脚本中的正则表达式是一种强大的文本处理工具,它可以帮助我们快速、高效地处理文本数据。然而,由于正则表达式中的特殊字符容易被误解为特殊含义,因此在使用Shell脚本处理正则表达式时,我们需要对这些特殊字符进行转义,以确保它们能够正确地表示我们想要表达的含义。

🌻3.字符转义实操

🐓3.1 转义:"->data"字段

转义后:"\->data"

🐓3.2 问题:以上的"->data"字段中,为什么"-“需要转义,而”>"不需要转义?

  • 在Shell中,> 是一个特殊字符,用于重定向输出。
  • 然而,在 grep 的正则表达式中,> 不是一个特殊字符,因此通常不需要转义。
  • 但是,-grep 的正则表达式中通常被视为一个范围操作符(例如,a-z 表示从 a 到 z 的所有字符),所以如果它出现在字符类的开头,它就需要被转义,以防止 grep 将其解释为范围操作符。
  • grep 的正则表达式中,如果 -> 出现在模式的开头或者不在字符类定义中,通常不需要转义。例如:
grep '->data' filename
  • 这个命令会正确地搜索包含 ->data 的行,而不需要对 - 进行转义。但是,如果您正在使用 grep-E 选项(或者 egrep),并且您想要搜索的字段前面或后面有可能会被解释为范围的操作符,那么您可能需要转义 -
  • 在正则表达式中,如果 - 出现在方括号 [] 定义的一个字符类之外,它不会被解释为范围操作符,因此通常不需要转义。
  • 但是,如果 - 出现在方括号内,并且作为字符类的一部分,它就需要被转义,除非它是字符类的第一个或最后一个字符。例如:
grep '[a-\]data' filename  # 错误:需要转义
grep '[a\-]data' filename  # 正确:转义了 -
  • 在这个例子中,我们想要搜索包含 a-data 的行,但是因为 - 在方括号内并且后面紧跟一个 ],所以它需要被转义,以防止 grep 将其解释为从 a] 的范围。
  • 总的来说,是否需要转义 - 取决于它在正则表达式中的上下文。在大多数情况下,当它在 -> 中时,不需要转义,因为它不会被解释为范围操作符。

🐓3.3 转义:"->data()"字段

转义后:"\->data\(\)"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640929.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LLM】向量知识库

文章目录 认识向量知识库向量Embeddings向量数据库向量数据库的作用向量数据库与传统数据库的区别 Embedding API使用公有Embedding API自定义一个Embeedding API 常见文本数据的预处理搭建并使用向量数据库思考向量数据库在LLM中的价值体现向量的妙用,可行&#xf…

vue 请求php接口 header 传自定义参数 提示cors 跨域问题

前端地址 http://192.168.0.125:4021 请求后端地址的时候报 from origin http://192.168.0.125:4021 has been blocked by CORS policy: Request header field userid is not allowed by Access-Control-Allow-Headers in preflight response. 大概意思是请求 header里有个…

vue整合Echarts

首先打开网址https://echarts.apache.org/examples/zh/index.html 进入Echars官网找到自己想要的图形我这里选择的是柱形图 点开完整代码直接cv大法 下载Echars的npm npm install echarts 在vue里面挂在个div 导入相关包 写个方法 就是cv过来的 然后改成后端传过来的值…

OpenCV轻松入门(九)——使用第三方库imgaug自定义数据增强器

安装命令:pip install imgaug 代码实现: import cv2 import random import matplotlib.pyplot as pltfrom imgaug import augmenters as iaa # 数据增强——缩放效果 def zoom_img(img):# 获取一个1-1.3倍的线性图像处理器,scale参数是缩放范…

使用Unity扫描场景内的二维码,使用插件ZXing

使用Unity扫描场景内的二维码,使用插件ZXing 使用Unity扫描场景内的二维码,ZXing可能没有提供场景内扫描的方法,只有调用真实摄像机扫描二维码的方法。 实现的原理是:在摄像机上添加脚本,发射射线,当射线打…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

Qt 跨平台开发

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字: Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题,缘由有以下几个, 首先第一个,我们目前开发…

Hive 表添加列(新增字段)

前言 记录总结一下 Hive 表如何添加新的字段以及遇到的问题。 最初是因为要验证 Hudi Schema Evolution 中的增加字段问题 SQL alter table test_hive add columns (col_new string);# 级联应用到分区表的所有分区 # 对于 Parquet、Text 分区表需要加cascade , OR…

STM32F1串口

文章目录 1 数据通信的基础概念1.11.21.31.41.5 2 串口(RS-232)2.12.22.32.42.5 3 STM32的USART3.13.23.33.53.9 USART寄存器介绍 4 HAL库外设初始化MSP回调机制5 HAL库中断回调机制6 USART/UART异步通信配置步骤 (包括HAL库相关函数)6.16.26…

unity读写本地excel_2024.4.22

using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using Excel; using System.Data; using System; /// <summary> /// https://blog.csdn.net/Xz616/article/details/128893023 /// Unity3D操作…

管理集群工具之LVS

管理集群工具之LVS 集群概念 将很多机器组织在一起&#xff0c;作为一个整体对外提供服务集群在扩展性、性能方面都可以做到很灵活集群分类 负载均衡集群&#xff1a;Load Balance高可用集群&#xff1a;High Availability高性能计算&#xff1a;High Performance Computing …

JS 分片任务的高阶函数封装

前言 在我们的实际业务开发场景中&#xff0c;有时候我们会遇到渲染大量元素的场景&#xff0c;往往这些操作会使页面卡顿&#xff0c;给用户带来非常不好的体验&#xff0c;这时候我们就需要给任务分片执行。 场景复现 我们看一段代码&#xff1a; <!DOCTYPE html> &l…