bash + verify name by regular expression

Согласно этим источникам, разрешение для jiffies составляет 1 / HZ (какое бы значение ни было HZ ):

Он определен в одном из файлов заголовков, зависящих от ядра, например,

/usr/include/asm-generic/param.h

который является включен из

/usr/include/linux/param.h

и, в конечном итоге, из , который может находиться в директории, зависящей от архитектуры, например,

/usr/include/x86_64-linux-gnu/sys/param.h

. Из источников очевидно, что это константа времени компиляции и зависит от вашей конкретной системы.

4
10.07.2018, 02:19
3 ответа

По умолчанию регулярное выражение не привязывается к началу или концу строки. Это отличается от, например,. шаблоны подстановки имен файлов. Это означает, что выражение может совпасть где угодно в заданной строке.

Чтобы ваше выражение было привязано к началу строки, используйте

^worker[[:digit:]]

Чтобы дополнительно привязать его к концу строки и разрешить от одной до трех цифр, используйте

^worker[[:digit:]]{1,3}$

Если вы хотите сопоставить worker10, но не worker01илиworker003(без нуля -заполненные числа ), используйте

^worker([0-9]|[1-9][0-9]{1,2})$
8
27.01.2020, 20:48

Закрепите регулярное выражение с обеих сторон.

^worker[[:digit:]]$
1
27.01.2020, 20:48

why the following regular expression print valid, while name is hdpworker01

Почему? Поскольку регулярное выражение не привязано , то есть оно не определяет начало (или конец )строки, которая должна быть сопоставлена. Регулярное выражение workerбудет соответствовать, если какая-либо часть совпадающей строки равна worker. Он будет соответствовать hdpworkeranything, а также workerи многим другим вариантам. Чтобы соответствовать строке, начинающейся с worker, регулярное выражение должно содержать ^, например:

^worker

Если вы хотите сопоставить (до )3 цифры после слова worker, вы можете использовать:

^worker[0-9]{0,3}$

Тем не менее, было бы целесообразно зафиксировать число в скобках и поместить регулярное выражение в переменную (Использование переменной является лучшей практикой в ​​настоящее время):

re='^worker([0-9]{0,3})$'

$означает, что строка должна заканчиваться в этой точке.
Матч станет:

[[ $str =~ $re ]] && n=$((10#${BASH_REMATCH[1]}+0)) || n=-1

what I try to do is to print valid only if name is worker[0-999]

И это позволит проверить числовой nдиапазон:

(( 0 <= n && n <= 999 )) && echo "valid with n=$n"
1
27.01.2020, 20:48

Теги

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