Дистрибутив на основе Ubuntu для кластеров Beowulf, разработанный Университетом Страны Басков в Испании: http://www.ehu.eus/AC/ABC.htm
На основе дистрибутива ABC GNU / Linux на Ubuntu и специализируется на автоматическом создании высокопроизводительных кластеров Beowulf с загрузкой только в "живом" режиме во внешнем интерфейсе или при установке на ваш жесткий диск. Бездисковые узлы прорываются через PXE. Использовать в качестве оконного менеджера Gnome. Integra Resource Monitor Ganglia. Это первый дистрибутив, который объединяет все эти функции. Была опубликована научная статья об этой системе и представлена на симпозиуме IEEE ICAT2009, который проходил в Сараево (Босния и Герцеговина). Разработано Икером Кастаньосом, Изаскун Гарридо Гарридо и группой автоматического управления Aitor Университета Страны Басков UPV / EHU .
Перевод из статьи в Википедии на испанском .
Да, в (укажите регулярное выражение, иначе оно будет интерпретировано как глобус оболочки):
grep -Eq '[0-9]{7}' <<< "1505082"
grep соответствует 7 цифрам. Вы можете увидеть, что сопоставляется, заменив q наo
:
$ grep -Eo '[0-9]{7}' <<< "1505082"; echo "$?"
1505082
0
И да, это тоже будет соответствовать этому:
$ grep -Eq '[0-9]{7}' <<< "150508299999"; echo "$?"
1505082
0
Он убрал все девятки.
Проблема в том, что вы делаете не привязанное соответствие -, и оно будет соответствовать 7-значному(или более)числу.
Вы можете закрепить с помощью:
$ grep -Eq '^[0-9]{7}$' <<< "15050829999"; echo "$?"
1
Чтобы сопоставить 7-значное число в любом месте , за которым или перед которым стоят не -цифры, вам нужен совершенно другой якорь:
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082"; echo $?
1505082
0
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082_CSE_322"; echo $?
1505082
0
$ grep -oP '(?<=^|[^0-9])[0-9]{7}(?=[^0-9]|$)' <<< "1505082999_CSE_322"; echo $?
0
Это просмотр вперед, один просмотр -назад:
(?<=^|[^0-9])
Это соответствует либо началу строки (^
), либо цифре, отличной от -. Другой — прогноз:
(?=[^0-9]|$)
, которые соответствуют цифре, отличной от -, или концу строки.
Единственная другая альтернатива более простому Extended
регулярному выражению – извлечь любую серию из7
(или более )цифр, а затем подтвердить, что это ровно 7 цифр:
$ echo "150508299_CSE_322" |
grep -oE '[0-9]{7,}' |
grep -qE '^[0-9]{7}$'; echo "$?"
1
Когда с grep
возникают сложности, вы всегда можете использовать egrep
или даже язык программирования, доступный в системе linux/unix, чтобы помочь вам с вашими совпадениями/регулярными выражениями.
Если в вашей системе есть perl или ruby, вы можете сделать это в одну строку:
echo 1234567| ruby -lne 'print if /^\d{7}$/'
echo 1234567| perl -lne 'print if /^\d{7}$/'
или
cat file.txt | ruby -lne 'print if /^\d{7}$/'
Почему бы не использовать бинарный оператор Bash =~
?
$ [[ 1505082 =~ [0-9]{7} ]] && echo matched
matched
Подробнее см.:http://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Conditional-Constructs