前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >在Bash脚本中检查字符串是否匹配正则表达式

在Bash脚本中检查字符串是否匹配正则表达式

作者头像
程序熵
发布2024-12-25 15:22:37
发布2024-12-25 15:22:37
12900
代码可运行
举报
文章被收录于专栏:技术汇技术汇
运行总次数:0
代码可运行

问题

我的脚本接收的参数之一是以下格式的日期:yyyymmdd

我想检查我是否得到一个有效的日期作为输入。

我该怎么做呢?我尝试使用像这样的正则表达式:[0-9]\{\8}

回答

你可以使用测试结构[[]] 和正则表达式匹配操作符=~ 来检查字符串是否匹配正则表达式模式。

对于你的具体情况,你可以这样写:

代码语言:javascript
代码运行次数:0
复制
[[ "$date" =~ ^[0-9]{8}$ ]] && echo "yes"

或者更准确的测试:

代码语言:javascript
代码运行次数:0
复制
[[ "$date" =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo "yes"
#             |\______/\______*______/\______*__________*______/|
#             |   |           |                  |              |
#             |   |           |                  |              |
#             | --year--   --month--           --day--          |
#             |          either 01...09      either 01..09      |
#      start of line         or 10,11,12         or 10..29      |
#                                                or 30, 31      |
#                                                          end of line

也就是说,你可以在Bash中定义与你想要的格式匹配的正则表达式。你可以这样做:

代码语言:javascript
代码运行次数:0
复制
[[ "$date" =~ ^regex$ ]] && echo "matched" || echo "did not match"

如果测试成功,则执行&& 后面的命令;如果测试失败,则执行|| 后面的命令。

在其他shell中,可以使用grep。如果你的shell是POSIX兼容的,可以

代码语言:javascript
代码运行次数:0
复制
(echo "$date" | grep -Eq  ^regex$) && echo "matched" || echo "did not match"

需要注意的是,上述正则表达式并不完全准确,因为它没有考虑到每个月实际的天数和闰年的情况。例如,它会匹配20240230 这样的日期,尽管2月没有30日。 如果你需要更精确地匹配有效日期,可以使用如下方式做检查:

代码语言:javascript
代码运行次数:0
复制
if [[ "$date" =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] ; then
  if date -d "${date}" >/dev/null 2>&1 ; then
    echo "Valid date"
  else
    echo "Invalid date"
  fi
else
  echo "Invalid date"
fi

彩蛋

参考

•stackoverflow question 21112707•man date

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档