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.

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.