
Eu tenho um script diário que recupera estatísticas de hardware de todos os meus servidores RHEL todas as noites e as salva em umaaaammdd_daily.logarquivo. Eu tenho outros scripts que executo nesses arquivos para extrair dados específicos (ou seja,DriveArrrayStatus,Status do hardware,DiscoFreeSpace, etc.) para diferentes tarefas.
ExemploStatus do hardwaresaída do script:
#######################
Server: abc
** Fans **
Health: Ok
** Power Supplies **
Redundancy: Full
#######################
Server: bcd
** Fans **
Health: Partial
** Power Supplies **
Redundancy: Half
#######################
Server: cde
** Fans **
Health: Down
** Power Supplies **
Redundancy: None
#######################
etc... for 44 servers
Como raramente há falhas, gostaria de colorir as linhas que apresentam algum tipo de erro ao executar o script. Posso selecionar as linhas a serem examinadas usando grep:
./HardwareStatus | grep '^Health\|^Redundancy\|$'
Mas a partir daqui preciso colorir APENAS as linhas examinadas que NÃO terminam em suas respectivas respostas satisfatórias:
./HardwareStatus | grep --color=auto -v 'Ok$\|Full$'
Eu tentei canalizar a instrução grep de seleção de linha para um segundo grep ou usando egrep, mas ele simplesmente descarta todas as linhas que não possuem respostas satisfatórias na saída do script.
Qualquer ajuda seria muito apreciada.
Responder1
Você poderia usar o colorama
pacote em Python para escrever um filtro simples (ou talvez incluí-lo em seu script HardwareStatus, se estiver escrito em Python)
#!/usr/bin/env python3
import fileinput
from colorama import init, Fore, Back, Style
init()
for line in fileinput.input():
message = line.strip()
if (("Health:" in message and "Ok" not in message) or
("Redundancy:" in message and "Full" not in message)):
print(Back.RED + Fore.YELLOW + message + Style.RESET_ALL)
else:
print(message)
Para usar o script acima, basta canalizar a saída de HardwareStatus para ele, como você fez com grep no exemplo acima.
Vera documentação do Coloramapara detalhes.