Назад | Перейти на главную страницу

grep + регулярные выражения для соответствия уникальному номеру

Моя цель - проверить, является ли $ 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, но получаю «Not Backup file», несмотря на то, что $ FILE закончился на 2012.09.10.31

посоветуйте, пожалуйста, в чем проблема с моей строкой 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

Подстановка встроенной команды возвращает вывод команды, а не код возврата.

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

вернет пустую строку, а не ноль. Следовательно, эта единственная строка не будет работать должным образом.

Почему мы не можем использовать для этого встроенное Regexp с BASH / KSH? Где FILE1 - ваше имя резервного файла

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

Использование времени / ЦП для этого нуля. Без необходимости вы используете три команды, echo два раза и grep один раз.