поддержка grep unicode 16 - PullRequest
3 голосов
/ 30 июля 2011

Я использую TextEdit на macosx создал два файла, одинакового содержимого с разными кодировками, затем

grep xxx filename_UTF-16

ничего

grep xxx filename_UTF-8

xxxxxxx xxxxxxyyyyyy

grep did not support UTF-16?

Ответы [ 5 ]

4 голосов
/ 30 июля 2011
iconv -f UTF-16 -t UTF-8 yourfile | grep xxx
2 голосов
/ 30 июля 2011

Вы всегда можете попробовать сначала конвертировать в utf-8:

iconv -f utf-16 -t utf-8 filename | grep xxxxx
0 голосов
/ 12 июля 2019

Вы также можете использовать ugrep , который представляет собой замену grep и обратно совместим с GNU / BSD grep, что означает, что он принимает те же параметры, что и grep, но предлагает гораздо больше функций, таких как:

ugrep выполняет поиск в кодировке UTF, когда присутствует UTF BOM (метка порядка байтов), и ASCII и UTF-8, когда нет UTF BOM.Опция --encoding разрешает поиск во многих других форматах файлов, таких как ISO-8859-1, EBCDIC и кодовых страницах 437, 850, 858, 1250–1258.

ugrep совпаденийШаблоны Unicode по умолчанию (отключено с опцией -U).Синтаксис регулярного выражения соответствует стандарту POSIX ERE, расширен за счет классов символов Unicode, ленивых квантификаторов и отрицательных шаблонов, позволяющих пропускать нежелательные совпадения шаблонов для получения более точных результатов.

ugrep выполняет поиск в текстовых файлах и двоичных файлахфайлы и производит hexdumps для двоичных совпадений.

0 голосов
/ 21 мая 2019

Определите следующую функцию оболочки Ruby:

grep16() { ruby -e "puts File.open('$2', mode:'rb:BOM|UTF-16LE').readlines.grep(Regexp.new '$1'.encode(Encoding::UTF_16LE))"; }

Затем используйте ее как:

grep16 xxx filename_UTF-16

См .: Как использовать readlines.grep в Ruby для файлов UTF-16?

Для дополнительных предложений, проверьте: grepping бинарные файлы и UTF16

0 голосов
/ 17 января 2019

Используйте ripgrep утилиту вместо grep, которая может поддерживать grep файлы UTF-16.Установите: brew install ripgrep.

Затем запустите:

rg xxx filename_UTF-16

ripgrep поддерживает поиск файлов в текстовых кодировках, отличных от UTF-8, таких как UTF-16, латинский-1, GBK, EUC-JP, Shift_JIS и другие.(Предоставляется некоторая поддержка автоматического определения UTF-16. Другие кодировки текста должны быть специально указаны с помощью -E / --encoding flag.)

...