Почему метасимвол \ d не работает в команде find с -regextype posix-egrep активным?

дескрипторы файлов 1 и 2 (stdout & amp; stderr) могут быть закрыты вином, потому что он не использует их и может даже высвободить 0 (stdin) после того, как он установил обработчик клавиатуры. Кроме того, это было бы более справедливо для окон, поскольку все дескрипторы файлов доступны, как ожидается, в новом экземпляре программы.

2
задан 10 November 2017 в 23:39

3 ответа

\d (для десятичной цифры) не поддерживается синтаксисом расширенного регулярного выражения POSIX (или GNU grep) расширенного регулярного выражения (как легко подтвердить):

$ echo 'foo1234bar' | grep -E '\d'

Фактически \d поступает из perl и поддерживается GNU grep в режиме PCRE (perl-compatible regular expression):

$ echo 'foo1234bar' | grep -P '\d'
foo1234bar

Однако это не очень помогает с find с AFAIK, t еще предоставляет PCRE regextype - вам придется использовать простой диапазон символов [0-9], который поддерживается как ERE, так и базовыми регулярными выражениями (BRE):

find . -regextype posix-egrep -regex "\.\/ex[0-9]+\.jpg"

Причина \d*\.jpg соответствует ex.jpg, потому что \d рассматривается как литерал d - и нулевое или большее количество всего соответствует всем.

3
ответ дан 22 May 2018 в 16:20

\d (для десятичной цифры) не поддерживается синтаксисом расширенного регулярного выражения POSIX (или GNU grep) расширенного регулярного выражения (как легко подтвердить):

$ echo 'foo1234bar' | grep -E '\d'

Фактически \d поступает из perl и поддерживается GNU grep в режиме PCRE (perl-compatible regular expression):

$ echo 'foo1234bar' | grep -P '\d' foo1234bar

Однако это не очень помогает с find с AFAIK, t еще предоставляет PCRE regextype - вам придется использовать простой диапазон символов [0-9], который поддерживается как ERE, так и базовыми регулярными выражениями (BRE):

find . -regextype posix-egrep -regex "\.\/ex[0-9]+\.jpg"

Причина \d*\.jpg соответствует ex.jpg, потому что \d рассматривается как литерал d - и нулевое или большее количество всего соответствует всем.

3
ответ дан 18 July 2018 в 03:31

\d (для десятичной цифры) не поддерживается синтаксисом расширенного регулярного выражения POSIX (или GNU grep) расширенного регулярного выражения (как легко подтвердить):

$ echo 'foo1234bar' | grep -E '\d'

Фактически \d поступает из perl и поддерживается GNU grep в режиме PCRE (perl-compatible regular expression):

$ echo 'foo1234bar' | grep -P '\d' foo1234bar

Однако это не очень помогает с find с AFAIK, t еще предоставляет PCRE regextype - вам придется использовать простой диапазон символов [0-9], который поддерживается как ERE, так и базовыми регулярными выражениями (BRE):

find . -regextype posix-egrep -regex "\.\/ex[0-9]+\.jpg"

Причина \d*\.jpg соответствует ex.jpg, потому что \d рассматривается как литерал d - и нулевое или большее количество всего соответствует всем.

3
ответ дан 24 July 2018 в 17:51

Другие вопросы по тегам:

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