Мне нужно раскрасить вывод, используя цвет ANSI, например, в синий цвет, затем мы загрузим файл. Но если мы выберем ошибку слова в файле, эти слова должны быть окрашены в красный цвет.
Я пытаюсь использовать grep --color=always, но он сбрасывает цвет по умолчанию после совпадения слов.
Например, моя консоль теперь отображается синим текстом, но если я использую
cat test.txt | grep -E --color=auto '.*line.*|$'
this is line 2 <<<---this line is red
just doing something <<<- this line is black
И мне нужно, чтобы консоль вернулась к синему цвету
Я ожидаю, что консоль вернется к синему цвету
это так - регулярное выражение ищет |$
-> ".*line.* или, альтернативно, конец строки"
@jordanm из-за |$ . Тайлер Стони прав
Ах, я вижу, я пропустил эту часть. Это ожидаемое поведение, потому что grep окрашивает только ту часть, которая соответствует (то, что было бы отображено, если бы вы использовали grep -o
). В этом случае он не может добавить цвет в конец строки.
@jordanm Знаете ли вы какую-нибудь команду, которая может окрашивать только нужное слово в красный цвет, но сохраняет цветной вывод консоли?
Вы можете поиграться с переменной окружения GREP_COLORS
перед запуском grep
.
GREP_COLORS='sl=36:cx=36' grep -E '.*line.*|$' filename
будет окрашивать «выбранную строку» и «контекстную строку» в цветовой код перехода, который вы установили (в этом примере 36 — голубой)
Я с радостью отдам должное ответу здесь, чтобы использовать его для дополнительной справки: https://unix.stackexchange.com/questions/705097/default-value-for-the-grep-colors-environment-variable
Если вам все еще нужно, чтобы цвета терминала были голубыми (или любым другим цветом, который вы изначально выбрали) после запуска grep, я бы попробовал просто повторить escape-последовательность после вашего вызова grep.
Дополнительное примечание: запустите свой скрипт через shellcheck, cat избыточен с grep. Вместоcat filename | grep mystring
просто используйте grep mystring filename
Он работает в консоли bash, но не работает в Jenkins (((
Дженкинс выводит цвета терминала? Когда моя команда использовала его, все escape-коды ansi буквально печатались в выходном тексте.
я думаю, что нет, я использую ansi color и печатаю escape-коды, но если использовать это - cat test.txt | grep -E --color=auto '.*line.*|$' - целая строка "это строка 2" окрашена в красный цвет и в Дженкинсе. Я делаю все возможное, чтобы найти решение для окрашивания вывода кота в синий цвет, но строку со словом «линия» в красный цвет и не могу найти никаких решений.
Какую именно реплику вы дали Дженкинсу? Я мало что знаю о Дженкинсе, но если grep может раскрашивать некоторые символы таким образом, чтобы Дженкинс мог их анализировать, я подозреваю, что он должен иметь возможность раскрашивать таким образом любой набор символов. Если вы все еще делаете cat | grep,
, то установка встроенного GREP_COLORS не будет иметь никакого эффекта, если он находится перед cat
. Проще говоря, GREP_COLORS='blah' cat filename | grep regex
не раскрашивается даже в терминале; использовать cat filename | GREP_COLORS='blah' grep regex
@TylerStoney есть плагин для всего в jenkins, включая перевод цвета ASNI в html для просмотра журнала. plugins.jenkins.io/ansicolor
@diyes92182 diyes92182 Я думаю, что на Дженкинсе вам, вероятно, понадобится --color=always
с этим.
@jordanm да! Вы прямо сейчас это работает, как ожидалось. Я не могу поставить вам точку, потому что система этого не позволяет. Спасибо также Тайлеру Стони! Итак, рабочая строка для jenkins: GREP_COLORS='sl=36:cx=36' grep --color=always -E '.*line.*|$' имя файла
just doing something
не соответствует вашему выражению grep, почему оно вообще печатается?