Redirect / Pipe output i ustaw zmienną środowiskową

2

Zasadniczo, mam plik, którego linie chcę pokolorować różnymi kolorami, jeśli pasuje do 1 z 2 wyrażeń regularnych z grep. Jeśli pasuje regexp1, użyj jednego koloru; jeśli pasuje regexp2, użyj innego.

Jednak kolory grep z jednym kolorem na raz, więc chciałbym sprowadzić wyjście grep do innej instrukcji grep o innym kolorze.

Jednak kolor grep jest kontrolowany za pomocą zmiennej środowiskowej GREP_COLOR (jest to przestarzałe na korzyść GREP_COLORS, ale nie działało na Windows, więc zamiast tego używam GREP_COLOR)

Plik wsadowy będzie wyglądał mniej więcej tak:

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

Jak mogę zmienić GREP_COLOR na drugie połączenie grep?

Pracuję z dwoma plikami wsadowymi, ale musi istnieć sposób, aby to zrobić za pomocą pojedynczego pliku wsadowego:

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

Jakieś pomysły? Wydaje się, że powinno być proste, ale zmarnowałem dobre 2 godziny, próbując zrobić z niego 1 plik wsadowy bez żadnego sukcesu.

Rado
źródło

Odpowiedzi:

0

Wydaje się, że rozwiązanie w postaci pliku tymczasowego powinno działać.

Coś jak:

@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

Generalnie nie lubię tworzyć plików tymczasowych, ale to szybkie rozwiązanie, które przychodzi mi do głowy.

Jason Sherman
źródło
Plik Temp nie działa dla mnie, ponieważ będę kolorował wejście, które jest dynamiczne - wyjście z kompilacji, która działa przez wiele godzin i nieprzerwanie wyświetla dane. Echo GREEN RED OTHER to tylko przykład. Sposób, w jaki plik wsadowy będzie normalnie używany, to: gmake ... | color.bat. Mam już rozwiązanie opisane w powyższym pytaniu, które pozwoli mi zrobić gmake ... | color1.bat | color2.bat, ale myślę, że istnieje sposób, aby to zrobić tylko z jednym plikiem. Coś jak grep | (ustaw GREP_COLOR = x i amp; grep)
Rado