在 shell 脚本中起作用的正则表达式模式(没有给定子项的字符串)[已关闭]

Regex pattern that work in shell script (string without given subtring) [closed]

提问人:Ashish Sharma 提问时间:11/8/2023 最后编辑:Ashish Sharma 更新时间:11/9/2023 访问量:45

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

14天前关闭。

截至 13 天前,社区正在审查是否重新打开此问题。

我需要编写正则表达式模式,而不是验证给定的字符串。基本字符串将遵循结构“atmvttd/configs/alerts/default/prod/alerts.json” 这里要匹配的重要事项是:

  • 在适当的默认情况下,任何字符串都可以像全球、印度、泰国等一样出现
  • 代替 prod,除了 prod 之外,任何字符串都可以出现
  • 其余部分应存在

这意味着这些字符串将传递:

"atmvttd/configs/alerts/default/qa/alerts.json"
"atmvttd/configs/alerts/default/dev/alerts.json"
"atmvttd/configs/alerts/global/qa/alerts.json"
"atmvttd/configs/alerts/global/dev/alerts.json"

但这些字符串将失败:

"atmvttd/configs/alerts/adaad/prod/alerts.json"
"atmvttd/configs/alerts/global/prod/alerts.json"
"atmvttd/configs/alerts/default/prod/alerts.json"

我正在根据要求添加代码片段。目前我没有解决方案,所以我使用另一种方式,排除考虑任何其他值。但是我有正确的正则表达式,根据我的问题,我只会使用它。

pattern='^"atmvttd/configs/alerts/[^/]+/(qa|dev|uat|sit|perf|preprod|test)/alerts.json"$'

action_needed=0
while IFS= read -r line; do
if [[ "$line" =~ $pattern ]]; then
  echo "MATCH $line"
  action_needed=1
fi
done < test.txt

if [[ $action_needed -eq 1 ]]; then
    echo "looks good"
else
    echo "Since require file/folder pattern $file_path was not changed. hence exiting."
    exit 0
fi
正则表达式 bash

评论

0赞 Ashish Sharma 11/8/2023
想提一下,这种模式将不起作用'^“atmvttd/configs/alerts/[^/]+/(?!prod/).*alerts.json“$'
1赞 choroba 11/8/2023
你用这个正则表达式吗?在其他地方或其他地方?[[ $var =~ $regex ]]
1赞 Ed Morton 11/8/2023
多个工具使用多个正则表达式标准,具有多个选项和多个删除器。您必须通过提供您计划如何使用此正则表达式以及您打算使用哪些工具的上下文来缩小范围,以便我们为您提供帮助。
2赞 Ed Morton 11/8/2023
当然,还可以添加您的代码尝试来解决您的问题,请参阅如何提问
0赞 Ashish Sharma 11/9/2023
@choroba是的,我在 if 块中使用 =~

答: 暂无答案