grep - color=auto с-i опцией отключает цвет совпавшего текста, почему?

Я бездельничал с grep и помещенный это в мой .zshenv:

export GREP_OPTIONS="--color=auto"
export GREP_COLORS='mt=1;34'

Я ударял голову на клавиатуре и изменении GREP_COLORS вокруг в течение минуты, пытаясь выяснить, почему цвета папки работали, но совпавший текст не был.

Я делал это:

$ grep -R -n -i -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *

Номер строки и имена файлов были установлены с цветами по умолчанию, но совпавший текст не был.

После пребывания слишком в течение большого количества времени, я думавший сделать это:

$ grep -R -n -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *

(Я удалил -i опция.) Это - все, что потребовалось, чтобы заставить совпавший текст правильно обнаруживаться полужирным синий. Это - Cygwin на установке Vista с rxvt, работающим zsh.

Какая-либо идея, почему цвета grep повредились бы при определении нечувствительного к регистру соответствия?

Обновление: Под cygwin 1.7 это немного лучше - поиск без учета регистра работает правильно, но это только выделяет слово, которое соответствует выражению точно. Другими словами, "FunctionFoo" выделяет "FunctionFoo", но не "functionFoo" и наоборот. Вероятно, grep выходит, таким образом, я буду отправлять его тому списку.

4
задан 13.01.2010, 22:47

1 ответ

Это не связано с Cygwin, но с grep. Необходимо установить переменные среды локали в оболочке, как ЛЕНГ.

Взятый от grep (1) руководство:

Локаль для категории LC_foo указана путем исследования этих трех переменных среды LC_ALL, LC_foo, ЛЕНГ, в том порядке. Первая из этих переменных, которая установлена, указывает локаль. Например, если LC_ALL не установлен, но LC_MESSAGES установлен на pt_BR, то локаль бразильского португальского используется для категории LC_MESSAGES. Локаль C используется, если ни одна из этих переменных среды не установлена, если каталог локали не установлен, или если grep не был скомпилирован с поддержкой национальных языков (NLS).

Попробуйте, например:

LANG=en_US.UTF-8 grep -R -n -i -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *

Это должно решить Вашу проблему и работы для меня с GNU grep 2.5.4 и колотить 3.2.48 (1) - выпуск.

1
ответ дан 07.12.2019, 21:48

Теги

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