Любая кодировка переменной длины может связываться с инструментами, которые не знают о кодировке и учитывают байты, а не символы, когда вы используете односимвольные подстановочные знаки (потому что инструмент предполагает, что byte = символ).Если вы используете буквенные символы, то для UTF-8 это не имеет значения, поскольку структура UTF-8 предотвращает совпадения в середине символа (при условии правильного кодирования).
Как минимум some версии grep должны быть осведомлены о UTF-8, в соответствии с http://mailman.uib.no/public/corpora/2006-December/003760.html, GNU grep 2.5.1 и более поздних версий включается туда, если установлен соответствующий LANG.Однако, если вы используете более старую версию или что-то иное, чем GNU grep, это, вероятно, будет причиной вашей проблемы, поскольку é является двухбайтовым символом (0xC3 0xA9).
РЕДАКТИРОВАТЬ: на основе вашегонедавний комментарий, ваш grep, вероятно, поддерживает Unicode, но он не выполняет никакой нормализации Unicode (и я бы не стал этого ожидать, если честно).
0x650xCC 0x81 - это e, за которым следует КОМБИНИРОВАНИЕ ОСТРОГО АКЦЕНТА (U + 0301) .Это фактически два символа, но он отображается как один из-за семантики объединения символов.Это тогда заставляет grep определять его как два символа;один для e и один для акцента.
Кажется вероятным, что разложенный Unicode - это то, как имя файла на самом деле хранится в вашей файловой системе - в противном случае, вы можете хранить файлы, которые, для любых целей и задач, имеютодно и то же имя, но отличаются только сочетанием символов.