Grep регулярное выражение не полностью соответствует недопустимым шестнадцатеричным цветным кодам - PullRequest
1 голос
/ 21 апреля 2020

Итак, у меня есть текстовый файл, содержащий действительные и недействительные шестнадцатеричные цветовые коды. Я хочу иметь возможность отфильтровать недействительные коды и распечатать только действительные. Чтобы код был действительным, он должен иметь символ ha sh, длиной 6 или 8 символов после символа ha sh, а символы должны быть af или 0-9. Моя команда grep, приведенная ниже, хранится в make-файле, но, похоже, это не является причиной того, что мое регулярное выражение не работает, так как оно избавляется от кодов, которые содержат менее 6 символов, но не от кодов с 7 или более 8 символов или коды, которые не имеют букв af. В целях тестирования я использую -v просто для распечатки недействительных кодов, поскольку я хочу увидеть, какие коды соответствуют, а какие нет.

grep -vE '^#([a-f0-9]{6})|([a-f0-9]{8})$$' colours.txt

Коды:

#b293a6
#ead58f
#31511bxf
#a69d36a2
#067806
#afe6e
#7f0bf7ef
#dd85
#042847421
#1a283af

Требуется вывод:

#b293a6
#ead58f
#a69d36a2
#067806
#7f0bf7ef

В данный момент я получаю:

#afe6e
#dd85

Обновлен вывод:

sean@sean-VirtualBox:~/Desktop$ head colours.txt | cat -A
#b293a6^M$
#ead58f^M$
#a69d36a2^M$
#067806^M$
#7f0bf7ef^M$
#f8b366^M$
#042847421^M$
#8946d7^M$
#c927d4^M$
#3e568bff^M$

1 Ответ

0 голосов
/ 21 апреля 2020

Ваш шаблон чередования неверен. ^#([a-f0-9]{6})|([a-f0-9]{8})$$ означает ^#[a-f0-9]{6} или [a-f0-9]{8})$ из-за неправильного размещения скобок.

Вы можете использовать это grep:

grep -ivE '^#[a-f0-9]{6}([a-f0-9]{2})?$' file

#31511bxf
#afe6e
#dd85
#042847421
#1a283af
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...