我的目标是验证 $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 脚本行来验证 $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 上运行此行,但我收到“非备份文件”提示,尽管 $FILE 以 2012.09.10.31 结尾
请告知我的 ksh 行存在什么问题(需要修复什么)才能匹配数字 - xxxx.xx.xx.xx
答案1
只需删除“-eq 0”
[[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` ]] && echo Not Backup file
答案2
内联命令替换返回命令的输出,而不是返回代码
` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' `
将返回一个空字符串,而不是零。因此,此单行代码不会按预期工作。
答案3
为什么我们不能使用 BASH/KSH 的内置正则表达式来实现这一点?其中 FILE1 是您的旧文件名
[[ "$FILE1" =~ [0-9]{4}\.[0-9]{2}\.[0-9]{2}\.1[0-9]{2} ]] || echo "Not a backup file"
此零的时间/CPU 利用率。您不必要地使用了三个命令,echo
两次和grep
一次。