regex - 需要使用正则表达式匹配变量中存在的类似标题的文件名
问题描述
我需要找到类似命名的字符串,这些字符串作为 bash 变量传递给作为函数参数的插值字符串中的正则表达式模式。我是 Regex 的新手,所以不确定最好的方法是什么。
这是我目前拥有的:
bash_script.sh
findKeys(`grep --ignore-case ^${apiServiceName}$`)
但是,某些 API 具有相似的名称,例如:
apiServiceNames = ['api-name', 'api-name-one', 'api-name-two']
令人困惑的一点是\
我需要${}
放置变量的位置(要转义的字符),但会$^
打开和关闭一个字符串。
解决方案
您不需要正则表达式匹配grep
或任何第三方工具。本机bash
shell 为模式匹配提供了足够强大的功能。例如,下面的构造写为
if [[ $apiServiceName == api-name?(?(-)+(one|two)) ]]; then
printf '%s - is allowed\n' "$apiServiceName"
fi
该构造是由 shell 提供的扩展 glob 匹配语法,在用于与运算符进行模式匹配api-name?(?(-)+(one|two))
时默认启用。查看更多关于extglob[[..]]
==
推荐阅读
- java - 2D 指向 Java 中的 SVG 或 PDF 文件
- apache-spark - 无法更改有状态 Spark 结构化流应用程序中的“spark.sql.shuffle.partitions”
- sql - SQL Server中具有逗号分隔值的多个groupby
- python - 提取或裁剪热图像的冷区或热区
- vba - 从列中删除数字
- php - PHP Monolog 记录器 RotatingFileHandler 从不旋转文件
- opennms - Opennms 初始化失败
- android - Android Studio IDE 未启动
- machine-learning - 如何标准化不同激活函数的训练数据?
- xcode - 找不到有效版本的 XCode