Разделение файла на каждые 10000 чисел (не строк)

Как уже упоминал @Steve , case требует глобуса, а не регулярного выражения. Вы все еще можете использовать case , вам просто нужно вместо него указать globs:

#!/bin/sh
dt="$1";
ptn1="[0-9]/[0-9]/[0-9][0-9][0-9][0-9]"           ## N/N/NNNN
ptn2="[0-9][0-9]/[0-9]/[0-9][0-9][0-9][0-9]"      ## NN/N/NNNN
ptn3="[0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]"      ## N/NN/NNNN
ptn4="[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]" ## NN/NN/NNNN

case "$dt" in 
    $ptn1|$pt2|$pt3|$pt4 ) echo "$dt : valid pattern" ;;
    *) echo "$dt : invalid" ;;
esac

Затем запустите сценарий следующим образом:

foo.sh 15/6/1900

Например:

$ for i in 05/6/1900 5/06/1900 05/06/1900 05/06/19 123/123/123; do foo.sh $i; done
05/6/1900 : valid pattern
5/06/1900 : valid pattern
05/06/1900 : valid pattern
05/06/19 : invalid
123/123/123 : invalid

Если у вас есть доступ к инструментам GNU (в частности, , GNU date ), вы также можете использовать такой трюк:

#!/bin/sh
dt="$1";
date -d $dt &> /dev/null &&
        echo "$dt : Valid pattern" ||
                echo "$dt :Invalid pattern"

Затем на том же тестовом входе, что и раньше:

$ for i in 05/6/1900 5/06/1900 05/06/1900 05/06/19 123/123/123; do foo.sh $i; done
05/6/1900 : Valid pattern
5/06/1900 : Valid pattern
05/06/1900 : Valid pattern
05/06/19 : Valid pattern
123/123/123 :Invalid pattern

Как видите, таким образом вы можете получить больше действительных шаблонов даже для случаи, когда, например, год указывается как YY вместо YYYY .

8
17.08.2015, 23:52
0 ответов

Теги

Похожие вопросы