LINUX.ORG.RU

Grep - только не бейте.

 


0

1

В сообщении [grep] [кириллица] количество вхождений слова (комментарий) сказано:«Запускай grep с той локалью, которая у тебя в проверяемом тексте - всё будет правильно грепать. ».

Вообщем столкнулся с похожей проблемой. Подскажите рабочий пример запуска grep з локалью как в проверяемом файле.

Ответ на: комментарий от Harald

Да есть пару файлов , ANSI (windows-1251), utf-8, utf-16. Там русские слова любые . Ну подскажите напр. как найти «слово» в utf-16 файле?

FreakMurderer
() автор топика
Ответ на: комментарий от FreakMurderer

сконвертировать все файлы в UTF-8, потом грепать

Harald ★★★★★
()
LC_ALL="ru_RU.UTF-8" grep 

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
ru_RU.utf8
ru_UA.utf8
Deleted
()
Ответ на: комментарий от FreakMurderer

Грепай двоичные последовательности заранее закодированных в нужные кодировки слов, те '\x1a\x0f|\x6d\x01'.

anonymous
()
Ответ на: комментарий от FreakMurderer

То есть полный пример для utf-16 выглядит как?

Такая кодировка не поддерживается:

$ sudo localedef -f utf-16 -i ru_RU ru_RU.utf16
файл отображений знаков «utf-16» не найден: Нет такого файла или каталога
/usr/share/i18n/locales/ru_RU:81: LC_MESSAGES: неизвестный знак в поле «yesexpr»
/usr/share/i18n/locales/ru_RU:82: LC_MESSAGES: неизвестный знак в поле «noexpr»
/usr/share/i18n/locales/ru_RU:83: LC_MESSAGES: неизвестный знак в поле «yesstr»
/usr/share/i18n/locales/ru_RU:84: LC_MESSAGES: неизвестный знак в поле «nostr»
/usr/share/i18n/locales/ru_RU:112: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:113: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:114: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:115: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:116: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:117: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:118: LC_TIME: неизвестный знак в поле «day»
/usr/share/i18n/locales/ru_RU:119: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:120: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:121: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:122: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:123: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:124: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:125: LC_TIME: неизвестный знак в поле «abday»
/usr/share/i18n/locales/ru_RU:126: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:127: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:128: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:129: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:130: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:131: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:132: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:133: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:134: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:135: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:136: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:137: LC_TIME: неизвестный знак в поле «mon»
/usr/share/i18n/locales/ru_RU:138: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:139: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:140: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:141: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:142: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:143: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:144: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:145: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:146: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:147: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:148: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:149: LC_TIME: неизвестный знак в поле «abmon»
/usr/share/i18n/locales/ru_RU:186: LC_ADDRESS: неизвестный знак в поле «country_name»
LC_MESSAGES: значение поля «yesexpr» не должно быть пустой строкой
LC_MESSAGES: значение поля «noexpr» не должно быть пустой строкой
выходной файл не создан, поскольку были предупреждения

Предлагается делать так:

$ iconv -f UTF-16LE -t UTF-8 myfile.txt | grep pattern

Deleted
()
Ответ на: комментарий от FreakMurderer

Да есть пару файлов, ANSI (windows-1251), utf-8, utf-16. Там русские слова любые

  • ANSI != windows-1251
  • utf-16 - это кривой вендоспецифичный костыль, поэтому поддержка слабая. Приводи файл к utf-8, потом грепай. Пример приведения «на лету» дан выше.
  • то же самое для cp1251
anonymous
()
Ответ на: комментарий от anonymous

ANSI != windows-1251

Как раз cp1251 соответствует стандарту ANSI, так же как ISO соответствует iso8859-5.

aureliano15 ★★
()
Ответ на: комментарий от anonymous

Грепай двоичные последовательности заранее закодированных в нужные кодировки слов, те '\x1a\x0f|\x6d\x01'.

Все же дайте пример на это, пожалуйста...

FreakMurderer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.