Замысловатая замена grep? - PullRequest
8 голосов
/ 05 марта 2009

Я разочарован тем, что grep не может найти слово "привет" в моих документах UTF-16.

Кто-нибудь может порекомендовать версию grep, которая пытается угадать кодировку файла и затем правильно с ней справиться?

Ответы [ 2 ]

6 голосов
/ 05 марта 2009

ack как замена grep на основе Perl?

Вы обязательно захотите проверить ack.

Он поддерживает кодировки Unicode и в основном grep, но лучше.

попробуйте соответствующий языковой стандарт Unicode с помощью grep

Если вы работаете в Linux, Unix и т. Д., Вы можете изменить свою LANG с возможностью изменения на кодировку, соответствующую вашим документам.

Сначала проверьте вашу локаль. Вот что по умолчанию установлено на моем MacBook Pro :

 $ locale 
 LANG="en_US.UTF-8"
 LC_COLLATE="en_US.UTF-8"
 LC_CTYPE="en_US.UTF-8"
 LC_MESSAGES="en_US.UTF-8"
 LC_MONETARY="en_US.UTF-8"
 LC_NUMERIC="en_US.UTF-8"
 LC_TIME="en_US.UTF-8" 
 LC_ALL=

скажем, под bash:

$ LANG="foo" grep 'gotta be found now' file.name

что-то более постоянное (будьте осторожны с этим):

$ export LANG="foo"
$ grep 'bar' mitz.vah
2 голосов
/ 05 марта 2009

Perl имеет лучший синтаксис регулярных выражений, чем grep (гораздо более мощный), он поддерживает UTF8 и UTF16, но я не уверен, насколько он хорош в угадывании кодировки ... если вы скажете ему, какую кодировку использовать Тем не менее, он может читать эти файлы без каких-либо проблем и выполнять регулярные выражения над ними. Для этого вам придется написать крошечную программу на Perl (ваша собственная реализация micro-grep на Perl), но это не так уж сложно. Perl существует для всех основных операционных систем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...