[A-Z]*
равно нулю или более вхождений [A-Z]
. В ##2
нет вхождений [A-Z]
, поэтому строка совпадает. Вероятно, вам нужен один или несколько(\{1,\}
(или \+
с GNU grep
, или совместимый ), или +
с опцией -E
, включающей ERE ), или просто ##[A-Z]
, как если бы это соответствовало ##[A-Z]
, он также соответствует ##[A-Z]+
и наоборот -.
Также обратите внимание, что за исключением локали C
/ POSIX
, то, что соответствует [A-Z]
, не указано, а список символов (или даже, возможно, элементы сопоставления, состоящие из нескольких символов ), которым он соответствует, различается. с локалью и операционной системой. В системах GNU это, как правило, только символы латинского алфавита (, включая такие вещи, как Dž
или É
), часто только прописные, но иногда и строчные, включая английские буквы a -z (, как в Тайская локаль для Таиланда в Ubuntu 18.04 по крайней мере ). В некоторых системах, отличных от -GNU, таких как Solaris, вы получаете гораздо более экзотические списки. Для соответствия только ABCDEFGHIJKLMNOPQRSTUVWXYZ используйте [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.
Из вывода strace видно, что программа ищет файл libc.mo
, но здесь проблема не в этом. Файл .mo
содержит перевод, и если он не найден, сообщения обычно отображаются на английском языке. Из путей,ваша локаль, кажется, en_US
, поэтому вам не нужен перевод.
Подсказка к проблеме здесь:
6260 write(2, "terminate called after throwing "..., 48) = 48
6260 write(2, "Unknown error -1", 16) = 16
Используйте больший размер для отображения усеченного сообщения после "выбрасывания"(-s 50
или более ). Вероятно, он содержит имя класса исключений. Другая подсказка — «Неизвестная ошибка -1», обычно бесполезна.
Если это не просто программа, а ваша программа, запустите ее в отладчике. Вы должны получить обратную -трассировку и много другой полезной информации.