使用bash [[命令的=〜运算符

jesse_b

在OSX上,我正在构建一个函数来验证日期格式,然后将其转换为时代时间。该函数应验证日期是否为以下格式之一,如果没有错误的话:01/01/1970 10:00PM10:00PM%m/%d/%Y %I:%M%p%I:%M%p

功能

checkTIME () {
    local CONVERT_CHK_TIME="$1"
    if [[ "$CONVERT_CHK_TIME" =~ ^(0[0-9]|1[0-2]):[0-9][0-9](AM|PM)$ ]]; then
        CONVERT_TIME="$(date -j -f "%I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
    elif [[ "$CONVERT_CHK_TIME" =~ (0[0-9]|1[0-2])\/([0-2][0-9]|3[0-1])\/\d{4}\s[0-9][0-9]:[0-9][0-9](AM|PM) ]]; then
        CONVERT_TIME="$(date -j -f "%m/%d/%Y %I:%M%p" "$CONVERT_CHK_TIME" "+%s")"
    else
        echo "ERROR!"
        exit 1
    fi
}

它目前可以正常使用,10:00PM但在我尝试时无法匹配01/10/2017 10:00PM

我这样称呼它:

./convert '01/10/2017 10:00PM'
...
...
+ [[ -n 01/10/2017 10:00PM ]]
+ checkTIME '01/10/2017 10:00PM'
+ local 'CONVERT_CHK_TIME=01/10/2017 10:00PM'
+ [[ 01/10/2017 10:00PM =~ ^(0[0-9]|1[0-2]):[0-9][0-9](AM|PM)$ ]]
+ [[ 01/10/2017 10:00PM =~ (0[0-9]|1[0-2])/([0-2][0-9]|3[0-1])/d{4}s[0-9][0-9]:[0-9][0-9](AM|PM) ]]
+ echo 'ERROR!'
ERROR!
+ exit 1

谢谢!

我还尝试了以下正则表达式:

(0[0-9]|1[0-2])\/([0-2][0-9]|3[0-1])\/\d{4}\ [0-9][0-9]:[0-9][0-9](AM|PM)
罗伯特·L

\d匹配某些版本的regex(perl)中的十进制数字,但不匹配中用于命令运算符扩展正则表达式=~[[bash

因此,将更\d改为[0-9]将匹配4个十进制数字的模式。

同样适用于\s要匹配一个文字空格字符,请\s用转义的空格(\代替如果要匹配1个或多个空格(空格或制表符),请\s替换[[:blank:]]+

更重要的是,要避免这些正则表达式混淆:

man bash表示=~正则表达式根据扩展的正则表达式语法进行匹配,如中所述regex(3)
man 3 regex(POSIX正则表达式函数)说SEE ALSO regex(7)
man 7 regex给出了正则表达式语法的说明,并说SEE ALSO POSIX.2, section 2.8 (Regular Expression Notation)

您可以在The Open Group的Posix正则表达式文档中找到完整的POSIX扩展正则表达式语法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash测试命令运算符

来自分类Dev

使用 !Shell命令上的运算符

来自分类Dev

使用三元运算符的TCL条件命令

来自分类Dev

使用AND运算符的Echo命令不会退出

来自分类Dev

使用AND运算符的Echo命令不会退出

来自分类Dev

根据命令存储和使用运算符

来自分类Dev

是否可以在一个命令中使用#和%运算符对左右bash进行修整?

来自分类Dev

如果使用=>运算符,则Xamarin命令数据绑定有效,但如果= =运算符,则无效

来自分类Dev

Bash OR运算符

来自分类Dev

使用>>运算符

来自分类Dev

通过Bash中的管道运算符重定向两个命令的输入

来自分类Dev

Bash正则表达式,从AT命令AT + COPS返回简短的字母数字运算符名称

来自分类Dev

与&&运算符一起使用的CMD中的gawk命令不起作用

来自分类Dev

如何在mysql和vb.net中使用带有IN运算符的参数命令

来自分类Dev

在Windows上使用管道运算符执行echo命令的行为?

来自分类Dev

运行外部命令时如何使用“>”重定向程序运算符?

来自分类Dev

使用aws cli命令的输出进行循环时无效的算术运算符

来自分类Dev

是否可以在终端命令模板循环中使用&&运算符?

来自分类Dev

如何使用[]运算符重新执行此命令以进行嵌套?

来自分类Dev

Bash脚本使用“ OR”运算符

来自分类Dev

Bash -o运算符

来自分类Dev

||之后的联合命令 (OR)运算符

来自分类Dev

了解 find 命令中的运算符

来自分类Dev

如何使 & 命令运算符的输出无效?

来自分类Dev

如何使用echo命令和重定向运算符将换行符放入文件中?

来自分类Dev

运算符“ +”的歧义使用

来自分类Dev

使用条件运算符

来自分类Dev

使用“?:”运算符返回

来自分类Dev

使用awk的〜运算符

Related 相关文章

热门标签

归档