Bash - 根据时间戳格式匹配参数的模式
Bash - Pattern matching an argument against the timestamp format
我有一个脚本,应该将格式的时间戳作为输入:
YYYY-mm-dd HH:mi:ss
我使用以下方法检查输入是否符合模式:
if [[ "" == "-r" && "" == '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' ]]
如果与模式不匹配,则应该抛出错误。我打开了 bash 日志记录,并将以下内容作为输入传递:
./meta_script_test.sh -r '2014-01-01 00:00:00'
bash -x
声明生成的日志显示:
[[ 2014-01-01 00:00:00 == \[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\ \[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\} ]]
+ usage 'Timestamp is in an improper format. Please enter it as: YYYY-mm-dd 00:00:00, and try again'
+ cat
Usage: ./meta_script_test.sh -r 'timestamp'
-r for reset is used to manually pass a date in timestamp format in case of data corruption for creating the delta table.
Example: ./meta_script_test.sh -r '2014-01-01 00:00:00'
我尝试了 if 语句的各种组合,例如:
if [[ "" == "-r" && "" == '\[0-9]{4}-\[0-9]{2}-\[0-9]{2} \[0-9]{2}:\[0-9]{2}:\[0-9]{2}' ]]
和
if [[ "" == "-r" && "" == '\(d){4}-\(d){2}-\(d){2} \(d){2}:\(d){2}:\(d){2}' ]]
似乎没有任何效果。您能否指出正确的正则表达式以将参数正确匹配到时间戳格式?谢谢!
使用=~
进行正则表达式匹配。 ==
用于精确匹配或匹配文件通配模式。不应引用正则表达式;由于您的正则表达式包含 space,因此您需要转义或引用该字符。
if [[ "" == "-r" && "" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]]
我有一个脚本,应该将格式的时间戳作为输入:
YYYY-mm-dd HH:mi:ss
我使用以下方法检查输入是否符合模式:
if [[ "" == "-r" && "" == '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' ]]
如果与模式不匹配,则应该抛出错误。我打开了 bash 日志记录,并将以下内容作为输入传递:
./meta_script_test.sh -r '2014-01-01 00:00:00'
bash -x
声明生成的日志显示:
[[ 2014-01-01 00:00:00 == \[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\-\[[=14=]\-\]\{\}\ \[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\}\:\[[=14=]\-\]\{\} ]]
+ usage 'Timestamp is in an improper format. Please enter it as: YYYY-mm-dd 00:00:00, and try again'
+ cat
Usage: ./meta_script_test.sh -r 'timestamp'
-r for reset is used to manually pass a date in timestamp format in case of data corruption for creating the delta table.
Example: ./meta_script_test.sh -r '2014-01-01 00:00:00'
我尝试了 if 语句的各种组合,例如:
if [[ "" == "-r" && "" == '\[0-9]{4}-\[0-9]{2}-\[0-9]{2} \[0-9]{2}:\[0-9]{2}:\[0-9]{2}' ]]
和
if [[ "" == "-r" && "" == '\(d){4}-\(d){2}-\(d){2} \(d){2}:\(d){2}:\(d){2}' ]]
似乎没有任何效果。您能否指出正确的正则表达式以将参数正确匹配到时间戳格式?谢谢!
使用=~
进行正则表达式匹配。 ==
用于精确匹配或匹配文件通配模式。不应引用正则表达式;由于您的正则表达式包含 space,因此您需要转义或引用该字符。
if [[ "" == "-r" && "" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]]