Почему требуется явный LANG=C при поиске шестнадцатеричных представлений символов в grep?

Когда я хочу рекурсивно искать в файлах TeX символы, не поддерживаемые шрифтом, я обычно начинаю с поиска неразрывных пробелов и пробелов нулевой ширины. Их трудно вывести в командной строке терминала, поэтому я использую их шестнадцатеричное представление в формате UTF-8.

env LANG=C grep -obUaP "\xc2\xa0" $(find -name '*.tex')
env LANG=C grep -obUaP "\xe2\x80\x8b" $(find -name '*.tex')

Почему мне нужно явно установить переменную окружения LANG в C, как показано выше: env LANG=C


Примечания

Использование -U и -a одновременно может показаться ошибочным, но в этой версии руководства говорится, что

Когда тип 'binary', grep может рассматривать нетекстовые байты как терминаторы строк даже без опции -z (--null-data).

-a заставляет только терминаторы строк быть терминаторами строк (не так ясно).

http://www.gnu.org/software/grep/manual/html_node/File-and-Directory-Selection.html

0
05.10.2017, 10:02
0 ответов

Теги

Похожие вопросы