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

news2024/11/15 20:00:31

简介: 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.coloradmin.cn/o/1616599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NovaMSS音乐源分离v1.3.3社区版

软件介绍 NovaMSS 基于最新 AI 模型优化的音乐源分离工具。它能够轻松地批量提取伴奏、人声、贝斯、鼓点等音轨,并且支持 GPU 加速,以提高处理速度和效率。社区版完全免费,简单易用,上传文件,点击处理,查看…

BI建设案例:FineBI大数据分析平台助力工程机械行业降本增效

工程机械行业作为国民经济的重要支柱,产品多样化、应用广泛,市场集中度高。其上游涉及原材料和核心零部件,下游则与房地产、基建工程和采矿等行业紧密相连。 如今,中国已崛起为全球工程机械制造大国,各类机械产品产量…

java开发之路——node.js安装

1. 安装node.js 最新Node.js安装详细教程及node.js配置 (1)默认的全局的安装路径和缓存路径 npm安装模块或库(可以统称为包)常用的两种命令形式: 本地安装(local):npm install 名称全局安装(global):npm install 名称 -g本地安装和全局安装…

基于spring boot的实习管理系统

基于spring boot的实习管理系统设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件&…

丁晴无硫指套:高科技产品保护的利器

Nitrile Sulphur-Free Finger Cots: A Weapon for Protecting High-Tech Products 随着科技的不断发展,微型电机、精密电子器件、仪器仪表等高科技产品的制造与应用日益普及。然而,这些产品的制造过程中往往需要特殊的保护措施,以防止静电、…

自动驾驶---OpenSpace之Hybrid A*规划算法

1 背景 笔者在上周发布的博客《自动驾驶---低速场景之记忆泊车》中,大体介绍了记忆泊车中的整体方案,其中详细阐述了planning模块的内容,全局规划及局部规划(会车)等内容,包括使用的算法,但是没…

.gitignore语法及配置问题

语法及配置 前言.gitignore语法Git 忽略规则优先级gitignore规则不生效Java项目中常用的.gitignore文件c项目中常用的.gitignore注意事项 前言 在工程中,并不是所有文件都需要保存到版本库中,例如“target”目录及目录下的文件就可以忽略。在Git工作区的…

四信AI睿析—边缘智脑:赋能农业新时代,开启智慧种植新篇章

方案简介 本系统前端安装土壤墒情监测站,包括温湿度传感器、二氧化碳传感器、PH值传感器、土壤电导率传感器、土壤温湿度传感器、光照传感器等组成;高清枪机摄像头等、负责种植区域温湿度、土壤EC、土壤温湿度、光照等环境因子、视频数据、农作物生长图…

Spring 依赖-ApiHug准备-测试篇-015

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace gradle…

Golang | Leetcode Golang题解之第44题通配符匹配

题目: 题解: func isMatch(s string, p string) bool {for len(s) > 0 && len(p) > 0 && p[len(p)-1] ! * {if charMatch(s[len(s)-1], p[len(p)-1]) {s s[:len(s)-1]p p[:len(p)-1]} else {return false}}if len(p) 0 {retur…

【Linux学习】初始认识操作系统

文章目录 🚀简单认识操作系统(Operator System)🌂操作系统的定义🌂为什么需要操作系统呢?🌂系统调用和库函数概念 🚀简单认识操作系统(Operator System) 🌂操作系统的定义 操作系统(Operation…

20240331-2-文本表征方式

静态语义表示方法 知识体系 主要包括词袋模型 BoW、TFIDF、LDA、Word2vec、Golve、Doc2Vec 等。 Questions 在小数据集中 Skip-Gram 和 CBoW 哪种表现更好? Skip-Gram 是用一个 Center Word 预测其 Context 里的 Word;而 CBoW 是用 Context 里的所有…

Python 数据库简化操作:dataset 库介绍

文章目录 Python 数据库简化操作:dataset 库介绍第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见…

小清新思维题

CF521D shop Problem Solution 首先如果确定了执行的操作,执行顺序一定为赋值、加、乘。赋值操作只保留最大的,并可以转化为加法。每个数的加法操作按从大到小顺序排序后可以转化为乘法。最后将所有乘法操作从大到小排序选前𝑚个即可。 先…

数据库服务类--Redis--未授权访问终端Getshell

免责声明:本文仅做技术交流与学习. 目录 前提条件: windows上开启redis服务: Linux上创建&开启redis服务: 操作: 1-连接靶机redis 2-写入webshell 3-访问后门 redis--->webshell Redis未授权访问漏洞复现与利用 - 知乎 (zhihu.com) 前提条件: 端口开放(6379) 目录…

数据库左连接、右连接、内连接、全连接

在数据库增删改查中,数据通常不在同一张表中,涉及多表数据查询就需要表之间的连接方式,常用的数据库表连接方式有; 1)内连接:inner join 2)全连接:union 3)右连接&#x…

centos7安装了没有图形界面的解决办法

如果你的centos7是这样的 只需要重新选择虚拟机 按照这个配置调即可

面试宝典(1)——数据库篇(MySQL)

面试宝典(1)——数据库篇(MySQL) 1.什么是索引? 索引是一种用于加快数据库查询速度的数据结构。 索引可以帮助数据库快速定位到数据库表中特定列的记录,从而加快数据检索和查询的速度。 通过在表的列上…

protoc初识

protoc初识 参考资料 https://blog.csdn.net/qq_46637011/article/details/135085568 https://blog.csdn.net/qq_39400324/article/details/134172333 一 前期准备 windows查看proto是否安装好及版本号 protoc --version windows查看路径下文件 dir 想在124.50机器上安…

Linux进程概念(四):进程优先级 环境变量

目录 进程优先级 学前补充 命令行参数 环境变量 环境变量$PATH 整体理解环境变量 environ指针 获取环境变量的三种方式 内建指令 证明内建指令的存在 进程优先级 基本概念:指定进程获取某种资源的先后顺序 linux的优先级是进程控制块task_struct中的…