Раскрасить вывод другим цветом

Мне нужно раскрасить вывод, используя цвет 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

Консоль

И мне нужно, чтобы консоль вернулась к синему цвету

Я ожидаю, что консоль вернется к синему цвету

just doing something не соответствует вашему выражению grep, почему оно вообще печатается?
jordanm 31.01.2023 19:39

это так - регулярное выражение ищет |$ -> ".*line.* или, альтернативно, конец строки"

Tyler Stoney 31.01.2023 19:41

@jordanm из-за |$ . Тайлер Стони прав

diyes92182 31.01.2023 19:45

Ах, я вижу, я пропустил эту часть. Это ожидаемое поведение, потому что grep окрашивает только ту часть, которая соответствует (то, что было бы отображено, если бы вы использовали grep -o). В этом случае он не может добавить цвет в конец строки.

jordanm 31.01.2023 19:47

@jordanm Знаете ли вы какую-нибудь команду, которая может окрашивать только нужное слово в красный цвет, но сохраняет цветной вывод консоли?

diyes92182 31.01.2023 19:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете поиграться с переменной окружения 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 (((

diyes92182 31.01.2023 20:14

Дженкинс выводит цвета терминала? Когда моя команда использовала его, все escape-коды ansi буквально печатались в выходном тексте.

Tyler Stoney 31.01.2023 20:32

я думаю, что нет, я использую ansi color и печатаю escape-коды, но если использовать это - cat test.txt | grep -E --color=auto '.*line.*|$' - целая строка "это строка 2" окрашена в красный цвет и в Дженкинсе. Я делаю все возможное, чтобы найти решение для окрашивания вывода кота в синий цвет, но строку со словом «линия» в красный цвет и не могу найти никаких решений.

diyes92182 31.01.2023 20:39

Какую именно реплику вы дали Дженкинсу? Я мало что знаю о Дженкинсе, но если grep может раскрашивать некоторые символы таким образом, чтобы Дженкинс мог их анализировать, я подозреваю, что он должен иметь возможность раскрашивать таким образом любой набор символов. Если вы все еще делаете cat | grep,, то установка встроенного GREP_COLORS не будет иметь никакого эффекта, если он находится перед cat. Проще говоря, GREP_COLORS='blah' cat filename | grep regex не раскрашивается даже в терминале; использовать cat filename | GREP_COLORS='blah' grep regex

Tyler Stoney 31.01.2023 20:52

@TylerStoney есть плагин для всего в jenkins, включая перевод цвета ASNI в html для просмотра журнала. plugins.jenkins.io/ansicolor

jordanm 31.01.2023 21:32

@diyes92182 diyes92182 Я думаю, что на Дженкинсе вам, вероятно, понадобится --color=always с этим.

jordanm 31.01.2023 21:33

@jordanm да! Вы прямо сейчас это работает, как ожидалось. Я не могу поставить вам точку, потому что система этого не позволяет. Спасибо также Тайлеру Стони! Итак, рабочая строка для jenkins: GREP_COLORS='sl=36:cx=36' grep --color=always -E '.*line.*|$' имя файла

diyes92182 01.02.2023 10:17

Другие вопросы по теме