Поиск текста в выбранной системе кодирования в файловой иерархии - PullRequest
1 голос
/ 15 февраля 2012

Я хочу найти текст в указанной системе кодирования (cp1251 / UTF-8 / UTF-16-le / iso-8859-4 и т. Д.) В файловой иерархии.

Например, у меня естьисходный код в cp1251 кодировке, и я запускаю Debian с системным кодированием UTF-8 . grep или Midnight Commander выполняют поиск в кодировке UTF-8.Поэтому я не могу найти русские слова.

Предпочтительные решения будут использовать стандартные утилиты командной строки POSIX или GNU (например, grep ).

Решение MC или Emacs также приветствуется.

Я пытался:

$ grep `echo Привет | iconv -f cp1251 -t utf-8` *

, но эта команда иногда не показывает результаты.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Команда, которую вы предложили, выводит строку Привет, затем передает результат этого вывода в iconv и применяет grep к результату iconv.Это не то, что вы хотите.То, что вы хотите, это:

find . -type f -printf "iconv -f cp1251 -t utf-8 '%p' | grep --label '%p' -H 'Привет'\n" | sh

Это применяет iconv, за которым следует grep, к каждому файлу ниже текущего каталога.

Но учтите, что это предполагает, что all из ваших файлов в CP1251.Это потерпит неудачу, если только некоторые из них.В этом случае вам сначала нужно написать программу, которая определяет кодировку файла, а затем применяет iconv только в случае необходимости.

0 голосов
/ 19 февраля 2012

Из командной строки:

LANG=ru_RU.cp1251 grep Привет *
...