【问题标题】:Shell REGEX for date日期的壳正则表达式
【发布时间】:2016-08-25 04:45:30
【问题描述】:

如果用户输入的日期格式不是 (YYYY-MM-DD),我会尝试修复用户输入,但我无法弄清楚。这是我所拥有的:

while [ "$startDate" != "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" ]
do
  echo "Please retype the start date (YYYY-MM-DD):"
  read startDate
done

【问题讨论】:

    标签: regex bash shell date


    【解决方案1】:

    您必须使用! $var =~ regex 而不是!= 来执行regex comparisons

    [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]
             ^^
    

    这样你的脚本可以是这样的:

    date=""
    while [[ ! $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; do
        echo "enter date (YYYY-MM-DD)"
        read $date
    done
    

    【讨论】:

      【解决方案2】:

      为什么不使用日期程序将不正确的格式转换为所需的格式:

      $ date -d "06/38/1992" +"%Y-%m-%d"
      1992-06-28
      

      您也可以通过检查返回值来检查转换失败。

      $ date -d "06/38/1992" +"%Y-%m-%d"
      date: invalid date ‘06/38/1992’
      
      $ [ -z $? ] || echo "Error, failed to parse date"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-17
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        相关资源
        最近更新 更多