首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在bash中使用regex来匹配大小写字母?

如何在bash中使用regex来匹配大小写字母?
EN

Unix & Linux用户
提问于 2020-11-10 11:00:59
回答 3查看 15.4K关注 0票数 8

我们设置了以下变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
status=ok
echo $status
ok

现在我们要验证使用regex的变量是否匹配。

如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ $status =~ [OK]  ]] && echo "is the same"
[[ $status =~ OK  ]] && echo "is the same"
[[ $status =~ "OK"  ]] && echo "is the same"

但上述任何一种非印刷品“都是相同的”。

我的领地出什么问题了?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2020-11-10 11:06:02

[OK]将匹配括号中的任一字符,方括号不会告诉它不区分大小写。

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ "$status" =~ ^[Oo][Kk]$ ]]

或者我可能会做以下的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ "${status,,}" == ok ]]

用于参数展开的,,运算符将将整个变量转换为小写,以便进行比较。

票数 17
EN

Unix & Linux用户

发布于 2020-11-10 22:06:09

[[ $status =~ OK ]] (或[[ $status =~ "OK" ]])匹配如果$status 包含 OK,而[[ $status =~ [OK] ]]匹配它<>包含该OK集合中的一个字符,则为OK

对于正则表达式,如果要将主题作为一个整体而不是在主题中匹配,则需要使用^$分别在主题的开头和结尾锚定模式。

要在bash中执行不区分大小写的匹配,可以使用nocasematch选项:

这适用于与Korn样式的[[ $var = pattern ]]或标准case $var in (pattern)的shell模式匹配,以及与[[ $var =~ regexp ]]的regexp匹配。

所以,在这里你可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shopt -s nocasematch
[[ $status = ok ]] && echo yes
[[ $status =~ ^ok$ ]] && echo yes
case $status in
  (ok) echo yes
esac

(您可能希望在结束后取消nocasematch设置,或者将其重置为以前的值(请参阅typeset restore="$(shopt -p nocasematch)"以保存,eval "$restore"用于恢复),因为保持此状态将影响所有模式匹配操作)。

或者你可以用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ $status = [oO][kK] ]] && echo yes
[[ $status =~ ^[oO][kK]$ ]] && echo yes
case $status in
  ([oO][kK]) echo yes
esac
case $status in
  (ok | OK | Ok | oK) echo yes
esac

基于case的变体是标准的POSIX sh语法。

zsh外壳中,您可以使用扩展的globing操作符或PCRE操作符,而不是全局地打开全局nocasematch选项(并扭曲所有模式匹配操作符),这些操作符可以选择性地对单个模式或单个模式的一部分启用不区分大小写的匹配。

例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set -o extendedglob
[[ $status = (#i)ok ]]

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zmodload zsh/pcre
[[ $status -pcre-match '^(?i)ok或相当于bash's ${var,,},使用$var:làla csh或${(L)var}[ "$status:l" = ok ]在zsh中,您应该避免使用名为$status的变量,因为该变量保存了前面命令的退出状态,并将其作为Bourne样式$?的别名,就像大多数非伯恩shell (csh、tcsh、rc、es、fish )一样。在Korn的ksh93变体(它的bash和zsh都复制了[[...]] )中,您可以执行[[ $status = ~(i)ok ]]]]

或相当于D26's D27,使用D28àla csh或D29D30

D31中,您应该避免使用名为D32的变量,因为该变量保存了前面命令的退出状态,并将其作为Bourne样式D33的别名,就像大多数非伯恩shell (csh、tcsh、rc、es、fish )一样。

在Korn的ksh93变体(它的bash和zsh都复制了D34 )中,您可以执行D35

票数 10
EN

Unix & Linux用户

发布于 2020-11-10 21:53:54

您可以这样做模式匹配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ $status == @(ok|OK|okay) ]] && echo "is the same"

或者,类似于jesse在上一篇文章中的想法,用于参数展开的^^操作符将将整个变量转换为大写,以便进行比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[ "${status^^}" == OK ]] && echo "is the same"
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/618963

复制
相关文章
LogicFlow内置插件使用
这一节将讲解快速上手 LogicFlow 流程图编辑框架的内置插件使用,项目整体基于Vue3+Vite3+Ts4开发,为帮助还为熟练使用 Vue3 和 Typescript 语法的小伙伴提供便利,如果你已经很熟练在Vue3中的开发习惯,建议直接访问 LogicFlow 将获取完整的入门指南。
前端小鑫同学
2023/03/06
1.5K0
LogicFlow内置插件使用
使用 Python 自定义 APISIX 插件
除了 APISIX 官方内置的插件之外,我们也可以根据自己的需求去自定义插件,要自定义插件需要使用到 APISIX 提供的 Runner,目前已经支持 Java、Go 和 Python 语言的 Runner,这个 Runner 相当于是 APISIX 和自定义插件之间的桥梁,比如 apache-apisix-python-runner 这个项目通过 Python Runner 可以把 Python 直接应用到 APISIX 的插件开发中,整体架构如下所示:
我是阳明
2022/02/11
1.3K0
使用 Python 自定义 APISIX 插件
LogicFlow内置菜单插件
这一节将讲解快速上手 LogicFlow 流程图编辑框架的内置菜单插件,项目整体基于Vue3+Vite3+Ts4开发,为帮助还为熟练使用 Vue3 和 Typescript 语法的小伙伴提供便利,如果你已经很熟练在Vue3中的开发习惯,建议直接访问 LogicFlow 将获取完整的入门指南。
前端小鑫同学
2023/03/06
1.3K0
LogicFlow内置菜单插件
RePlugin 插件化-内置加载
PS:插件化是什么这里就不再说了,从这里开始两种加载方式中的一种(内置加载),该框架是奇虎360开发的,官方给出优点 RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案。我们“逐词”拆开来解释这个定义: 完整的:让插件运行起来“像单品那样”,支持大部分特性 稳定的:如此灵活完整的情况下,其框架崩溃率仅为业内很低的“万分之一” 适合全面使用的:其目的是让应用内的“所有功能皆为插件” 占坑类:以稳定为前提的Manifest占坑思路 插件化方案:基于Android原生API和语言来开发,充分
cMusketeer
2018/06/21
1.2K0
RePlugin 插件化-内置加载
说明:meta-data下的name是包名+name,包名+version.var
cMusketeer
2018/06/20
5580
emlog插件挂载点使用和自定义名称方法
对于初学的emlog插件开发者来说,插件挂载点定义真是一个麻烦事!官方的插件定义不是很详细。所以小白给大家提供点思路。     其实挂载点主要就是两个函数doAction和addAction:
奶糖味的代言
2018/04/16
8280
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )
在 buildSrc 中开发了自定义 Gradle 插件 , 编译后在 build/libs 目录下会生成 buildSrc.jar 包 ,
韩曙亮
2023/03/30
1.4K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )
聊聊如何自定义实现maven插件
在日常的maven项目开发中,我们自己开发maven插件的机会是比较少,因为市面上的maven插件基本上就可以满足我们的日常开发需求。maven官方也提供了很多插件,详情可见如下链接
lyb-geek
2021/09/23
1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
在 Gradle 自定义插件 Plugin 中 , 如果要执行复杂的工作 , 可以在 实现的 Plugin 接口的 apply 函数中执行 ;
韩曙亮
2023/03/30
1K0
聊聊如何自定义实现maven插件
在日常的maven项目开发中,我们自己开发maven插件的机会是比较少,因为市面上的maven插件基本上就可以满足我们的日常开发需求。maven官方也提供了很多插件,详情可见如下链接
lyb-geek
2021/09/07
1.4K0
聊聊如何自定义实现maven插件
APISIX Ingress 如何支持自定义插件
Kubernetes 中的 Ingress 是一种资源对象,用于定义如何从 Kubernetes 集群外访问到 Kubernetes 集群内的服务,其中包含了具体的访问规则,通常情况下客户端使用 HTTP/HTTPS 协议进行访问。
Jintao Zhang
2023/02/26
4370
APISIX Ingress 如何支持自定义插件
Android插件化技术之旅 1 开篇 - 实现启动插件与调用插件中的Activity和Service
Android技术如今已很成熟了,组件化、插件化、热修复等等框架层出不穷,如果只停留在单纯的会用框架上,技术永远得不到成长,只有懂得其原理,能够婉婉道来,能够自己手动写出,技术才会得到成长,与其焦虑未来,不如把握现在。本篇将手写教大家写出插件化框架,插件化技术是Android高级工程师必备的技术之一,懂其思想,知其原理。本篇专题将由10篇文章来详细的讲解插件化技术,深耕一个技术领域,才能懂得如何更广阔的横向发展。
用户3045442
2019/01/09
1.2K0
IDEA 调用函数自动填充所有参数插件安装和使用简介
工作中有时候经常上下游参数较多而且参数名一致,每次都要写几个字母然后回车或者alt+enter选择单个参数,效率较低。
明明如月学长
2021/08/27
2.2K0
写过Mybatis插件?那说说自定义插件是如何加载的吧?
大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。 我们从插件配置、插件编写、插件运行原理、插件注册与执行拦截的时机、初始化插件、分页插件的原理等六个方面展开阐述。
程序猿DD
2023/04/04
3670
写过Mybatis插件?那说说自定义插件是如何加载的吧?
hexo 插件及 next 内置样式集
First add configuration in _config.yml from your hexo project.
Cell
2022/02/25
4940
Gradle自定义插件
在Gradle中创建自定义插件,Gradle提供了三种方式: 在build.gradle脚本中直接使用 在buildSrc中使用 在独立Module中使用 开发Gradle插件可以在IDEA中进行开发,也可以在Android Studio中进行开发,它们唯一的不同,就是IDEA提供了Gradle开发的插件,比较方便创建文件和目录,而Android Studio中,开发者需要手动创建(但实际上,这些目录并不多,也不复杂,完全可以手动创建)。 在项目中使用 在Android Studio中创建一个标准的And
用户1907613
2018/07/20
1.4K0
Gradle 自定义插件
插件被用来封装构建逻辑和一些通用配置。将可重复使用的构建逻辑和默认约定封装到插件里,以便于其他项目使用。
佛系编码
2019/12/11
2K0
Gradle 自定义插件
自定义maven插件
这两个依赖是自定义插件必须的依赖,代表了它是一个Mojo工程,里面包含了一些Mojo的接口和抽象类以及注解。 Mojo 就是 Maven plain Old Java Object。每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单个或多个相关的 Mojo 做统一分发。一个 Mojo 包含一个简单的Java类。插件中多个类似 Mojo 的通用之处可以使用抽象父类来封装。
十毛
2019/11/04
7530
Maven自定义插件
/** * @goal CustomMavenMojo:表示该插件的服务目标 * @phase compile:表示该插件的生效周期阶段 * @requiresProject false:表示是否依托于一个项目才能运行该插件 * @parameter expression="${name}":表示插件参数,使用插件的时候会用得到 * @required:代表该参数不能省略 */
王念博客
2019/07/24
1.1K0
点击加载更多

相似问题

如何禁用nosetest插件

10

调用Nagios内置插件

12

Tinymce从自定义菜单项调用内置插件

147

如何使使用内置的Xcode插件?

13

如何自定义ckeditor 4.2内置插件(如链接)?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文