
Ich habe ein tägliches Skript, das jede Nacht Hardware-Statistiken von allen meinen RHEL-Servern abruft und in einemjjjjmmtt_daily.logDatei. Ich habe andere Skripte, die ich für diese Dateien ausführe, um bestimmte Daten zu extrahieren (z. B.DriveArrayStatus,HardwareStatus,DiskFreeSpace, usw.) für verschiedene Aufgaben.
BeispielHardwareStatusSkriptausgabe:
#######################
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
Da es selten zu Fehlern kommt, möchte ich die Zeilen, die beim Ausführen des Skripts Fehler anzeigen, farblich markieren. Die zu untersuchenden Zeilen kann ich mit grep auswählen:
./HardwareStatus | grep '^Health\|^Redundancy\|$'
Aber von hier aus muss ich NUR die geprüften Zeilen einfärben, die NICHT mit den jeweiligen zufriedenstellenden Antworten enden:
./HardwareStatus | grep --color=auto -v 'Ok$\|Full$'
Ich habe versucht, die Grep-Anweisung zur Zeilenauswahl an ein zweites Grep weiterzuleiten oder egrep zu verwenden, aber dabei werden einfach alle Zeilen gelöscht, die keine zufriedenstellenden Antworten aus der Skriptausgabe liefern.
Wir wären für jede Hilfe sehr dankbar.
Antwort1
Sie können das colorama
Paket in Python verwenden, um einen einfachen Filter zu schreiben (oder es vielleicht in Ihr HardwareStatus-Skript einbinden, wenn dieses in Python geschrieben ist).
#!/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)
Um das obige Skript zu verwenden, leiten Sie die Ausgabe von HardwareStatus einfach dorthin weiter, wie Sie es in Ihrem obigen Beispiel mit grep getan haben.
Sehendie Colorama-Dokumentationfür Details.