Redirect / Pipe output e configure a variável de ambiente

2

Basicamente, eu tenho um arquivo cujas linhas eu quero colorir com cores diferentes se corresponder a 1 de 2 expressões regulares com o grep. Se regexp1 for correspondido, use uma cor; Se regexp2 for correspondido, use outro.

No entanto, cores grep com uma cor de cada vez, então o que eu gostaria de fazer é canalizar a saída do grep para outra instrução grep com uma cor diferente.

No entanto, a cor grep é controlada com uma variável de ambiente GREP_COLOR (isso é obsoleto em favor de GREP_COLORS, mas não funcionou no Windows, portanto estou usando GREP_COLOR)

Assim, o arquivo em lote será parecido com isto:

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

Como posso alterar o GREP_COLOR para a segunda chamada do grep?

Eu tenho ele trabalhando com 2 arquivos em lote, mas tem que haver uma maneira de fazer isso com um único arquivo de lote:

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

Alguma ideia? Parece que deve ser simples, mas eu perdi boas 2 horas tentando transformá-lo em um arquivo de lote sem sucesso.

    
por Rado 03.05.2011 / 02:06

1 resposta

0

Parece que uma solução de arquivo temporário deve funcionar.

Algo como:

@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

Eu geralmente não gosto de criar arquivos temporários, mas é a solução rápida que vem à mente.

    
por 03.05.2011 / 04:49