2

По сути, у меня есть файл, строки которого я хочу раскрасить разными цветами, если он соответствует 1 из 2 регулярных выражений с помощью grep. Если регулярное выражение соответствует, то используйте один цвет; если регулярное выражение совпадает, используйте другое.

Тем не менее, grep красит по одному цвету за раз, поэтому я хотел бы направить вывод grep в другой оператор grep другого цвета.

Тем не менее, цвет grep контролируется с помощью переменной среды GREP_COLOR (это не рекомендуется в пользу GREP_COLORS, но это не работает на окнах, поэтому вместо этого я использую GREP_COLOR)

Таким образом, командный файл будет выглядеть примерно так:

@echo off
setlocal
set GREP_COLOR=06;32
echo GREEN RED OTHER | grep --color=always --line-buffered "GREEN" | grep --color=always -E "RED"
endlocal

Как я могу изменить GREP_COLOR для второго вызова grep?

У меня это работает с 2 пакетными файлами, но должен быть способ сделать это с помощью одного пакетного файла:

ctest1.bat:

@echo off
setlocal
set GREP_COLOR=06;32
echo GREEN RED OTHER | grep --color=always --line-buffered "GREEN" | ctest2.bat
endlocal

ctest2.bat:

@echo off
setlocal
set GREP_COLOR=01;31
grep --color=always -E "RED" 
endlocal

Есть идеи? Кажется, это должно быть просто, но я потратил впустую 2 часа, пытаясь превратить его в 1 пакетный файл безуспешно.

1 ответ1

0

Похоже, решение временного файла должно работать.

Что-то вроде:

@echo off
setlocal
set GREP_COLOR=06;32
echo GREEN RED OTHER | grep --color=always "GREEN" > %temp%\color.tmp
set GREP_COLOR=01;31
grep --color=always "RED" %temp%\color.tmp
del %temp%\color.tmp
endlocal

Я вообще не люблю создавать временные файлы, но это быстрое решение, которое приходит на ум.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .