grep +正则expression式来匹配uniq号码

我的目标是validation$ FILE是否是一个备份文件(备份文件以xxxx.xx.xx.xx数字结尾

备份文件的例子

ls /etc/VRTSvcs/conf/config main.cf.17Dec2012.09.10.14 main.cf.17Dec2012.09.10.23 main.cf.17Dec2012.09.10.31 

没有备份文件的例子

  main.cf 

我写下面的ksh脚本行来validation$ FILE是否以xxxx.xx.xx.xx数字结尾

  [[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` -eq 0 ]] && echo Not Backup file 

我设定了

  FILE="main.cf.17Dec2012.09.10.31" 

我在Solaris / Linux上运行这一行,但是我得到了“不备份文件”,尽pipe$ FILE以2012.09.10.31结束

请build议什么问题与我的ksh行(需要修复)以匹配数字 – xxxx.xx.xx.xx

只要删除“-eq 0”

 [[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` ]] && echo Not Backup file 

内联命令replace返回命令的输出,而不是返回码

  ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` 

会返回一个空string,而不是一个零。 因此,这个上线不会按预期工作。

为什么我们不能在BASH / KSH中使用内build的Regexp呢? FILE1是你的backfile名字

 [[ "$FILE1" =~ [0-9]{4}\.[0-9]{2}\.[0-9]{2}\.1[0-9]{2} ]] || echo "Not a backup file" 

该零的时间/ CPU利用率。 无需你使用三个命令, echo两次, grep一次。