sil*_*zzo 10 regex unix shell ksh
我试图检查变量是否正好是两个数字,但我似乎无法弄明白.
你如何在KornShell(ksh)中检查正则表达式(正则表达式)?
我试过了:
if [[ $month =~ "[0-9]{2}" ]]
if [[ $month = _[0-9]{2}_ ]]
Run Code Online (Sandbox Code Playgroud)
我无法在其上找到任何文档.
任何见解?
case $month in
[0-9][0-9]) echo "ok";;
*) echo "no";;
esac
Run Code Online (Sandbox Code Playgroud)
应该管用.
如果您需要完整的正则表达式搜索,可以egrep像这样使用:
if echo $month | egrep -q '^[0-9]{2}$'
then
echo "ok"
else
echo "no"
fi
Run Code Online (Sandbox Code Playgroud)
自ksh88以来,Ksh一直支持有限的扩展模式
special '(' pattern ')'
Run Code Online (Sandbox Code Playgroud)
句法.
在ksh88中,'特殊'字符前缀会改变预期的匹配数:
'*' for zero or more matches
'+' at least one match
'@' for exactly one match
'?' for zero or one matches
'!' for negation
Run Code Online (Sandbox Code Playgroud)
在ksh93中,这扩展了
'{' min ',' max '}'
Run Code Online (Sandbox Code Playgroud)
表达一个确切的范围:
for w in 1423 12 "" abc 23423 9 33 3 333
do
[[ $w == {1,3}(\d) ]] && print $w has between 1 and three digits
[[ $w == {2}(\d) ]] && print $w has exactly two digits
done
Run Code Online (Sandbox Code Playgroud)
最后,你可以使用'〜'来实现类似perl的混乱,它引入了一个全新的扩展类,包括完整的正则表达式:
'〜(E)(正则表达式)'
更多例子可以在Finnbarr P. Murphy的博客中找到
我来自哪里,这更有可能验证数字月份:
if (( $month >= 1 && $month <= 12 ))
Run Code Online (Sandbox Code Playgroud)
要么
[[ $month =~ ^([1-9]|1[012])$ ]]
Run Code Online (Sandbox Code Playgroud)
或者包括一位数的月份的前导零:
[[ $month =~ ^(0[1-9]|1[012])$ ]]
Run Code Online (Sandbox Code Playgroud)