grep или egrep не правильно сопоставляет результаты mailq, содержащие восклицательный знак?

Я пытаюсь получить строки задержанных писем с помощью grep или egrep, которые содержат восклицательный знак / bang

root@server:~# mailq

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
0528561D88      878 Wed Feb  1 21:46:12  root@example.com
                                         root@example2.com

0D14161E2B      657 Wed Feb  x xx:47:01  root@example.com
                                         root@example2.com

0798C61E0F      657 Wed Feb  x xx:45:02  root@example.com
                                         root@example2.com

14AF361E2F!     657 Wed Feb  x xx:48:01  root@example.com
                                         root@example2.com

next

root@server:~# mailq |grep "[[:alnum:]]\!"
3658861E66!     657 Wed Feb  x xx:48:01  root@example.com
root@server:~# mailq |grep "^[[:alnum:]]\!"
root@server:~#

Первый grep работает дает ожидаемый результат, но второй не работает вообще

Любые мысли?

0
20.12.2018, 02:05
2 ответа

Вы grep ping для одного символа alnum, за которым следует удар. Попробуйте использовать шаблон ^ [[: alnum: ]] {10}! вместо этого.

0
28.01.2020, 02:34

Второе регулярное выражение, ^ [[: alnum:]]! соответствует одному буквенно-цифровому символу в начало строки, за которым следует восклицательный знак.

Например,

3!
A!
c!

Но не

14AF361E2F!

(десять буквенно-цифровых символов и ! )

Для соответствия точно десяти символам и ! , используйте

$ mailq | grep -E '^[[:alnum:]]{10}!'
2
28.01.2020, 02:34

Теги

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