Ich führe einen Unit-Test-Code aus. Der Unit-Test-Code gibt normalen Text aus. Da der Text viel enthält, möchte ich für den Benutzer wichtige Schlüsselwörter hervorheben.
In diesem Fall lauten die Schlüsselwörter "PASS" und "FAIL".
Wie färbt man "PASS" grün und "FAIL" rot?
bash
shell-script
scripting
colors
Trevor Boyd Smith
quelle
quelle
Antworten:
supercat
scheint zu tun, wonach Sie suchen.Es scheint keine Möglichkeit zu geben, anzugeben, was in der Befehlszeile eingefärbt werden soll. Sie müssen eine Konfigurationsdatei angeben.
Ich erinnere mich an ein Programm namens "hilite" oder "hl", das Text hervorhob, der einem Muster entsprach (wie
grep --colour
, aber auch nicht übereinstimmende Linien anzeigte), aber ich konnte ihn nicht finden, als ich danach suchte.Schließlich kann GNU
grep
verwendet werden, um Muster hervorzuheben - es kann jedoch nur eine Farbe verwendet werden (dh Sie können PASS nicht in Grün und FAIL in Rot haben, beide werden mit derselben Farbe hervorgehoben).Führen Sie Ihre Daten wie folgt durch:
In diesem Beispiel wird egrep (aka
grep -E
) verwendet, aber auch-G
regulärer regulärer Ausdruck,-F
fester String und-P
PCRE funktionieren.Alle Übereinstimmungen werden hervorgehoben. Die Standardeinstellung ist rot, oder legen Sie die env-Variable GREP_COLOR fest.
Der Schlüssel zu dieser Arbeit ist, dass das Finale
|$
im Muster mit dem Zeilenende übereinstimmt (dh alle Zeilen stimmen überein), sodass alle Zeilen angezeigt (aber nicht eingefärbt) werden.Das
\b
sind Worte , Grenzmarkierungen , so dass sie paßt zB FAIL aber nicht AUSFALL. Sie sind nicht erforderlich. Entfernen Sie sie daher, wenn Sie Teilwörter abgleichen möchten.Hier ist das Beispiel-Wrapper-Skript für Supercat, das ich gestern geschrieben habe. Es funktioniert, aber beim Schreiben habe ich festgestellt, dass Supercat keine Option für Suchvorgänge ohne Berücksichtigung der Groß- und Kleinschreibung hat. IMO, das macht das Programm deutlich weniger nützlich. Es hat das Skript jedoch stark vereinfacht, da ich keine '-i'-Option schreiben musste :)
quelle
supercat
Sie das von Ihnen veröffentlichte Skript ändern, um eine temporäre Konfigurationsdatei basierend auf den Befehlszeilenargumenten zu generieren, und dann aufrufenspc -c /path/to/your/temp/config
. Auf diese Weise können Sie auf einfache Weise unterschiedliche Farben für unterschiedliche Muster in der Befehlszeile angeben.Hier ist ein Allzweck-Skript zum Kolorieren von Regex-Mustern (muss wahrscheinlich überarbeitet werden):
Nennen Sie es
hilite.sh
und verwenden Sie es folgendermaßen:quelle
community wiki
weil meine Lösung nicht funktioniert.$BIN
viaeval
in die Befehlssubstitution wahrscheinlich fragil, umständlich und geradezu gefährlich ist. STDOUT ist ein Stream und soll im Allgemeinen von Stream-ähnlichen Tools verarbeitet werden. Der Versuch, einen gesamten Stream in einer Variablen zu erfassen, ist nicht sehr effizient. Aucheval
ist gefährlich mächtig , so dass nur es verwenden , wenn Sie wirklich wissen , was Sie tun.Das Einbetten beliebiger Zeichenfolgen (wie der
tput
Ausgabe) insed
Ersetzungsausdrücke ist problematisch, da Sie sicherstellen müssen, dass die Zeichenfolge (durch Escapezeichen) eine gültigesed
Syntax aufweist. Dies ist komplexer und wird am besten vermieden. Ich würdeawk
stattdessen verwenden. Nur als Beispiel:Der Schlüssel besteht darin, die
tput
Sequenzenawk
Variablen zuzuweisen , die hier mithilfe der-v
Optionen ausgeführt werden.quelle
awk
Skript besteht aus einer Reihe von Blöcken (das Material zwischen den Blöcken{}
auf der obersten Ebene). Jeder Block ist mit einer Bedingung verknüpft - in meinem obigen Beitrag gibt es keine, da ich bedingungslos auf jede Eingabezeile reagieren möchte. Awk liest Datensätze aus Dateien oder Standardeingaben (in diesem Fall ist es STDIN b / c, es wurden keine Dateinamen angegeben) und vergleicht sie mit jedem Block der Reihe nach, wobei der Block im Datensatz ausgeführt wird, wenn die Bedingung übereinstimmt.benutze printf:
z.B.
Der letzte
\n
fügt das Zeilenumbruchzeichen hinzu.um mögliche Werte zu sehen, versuchen Sie etwas wie:
Neben Farbe können Sie Modifikatoren wie Fett- oder Unterstreichung oder farbigen Text mit farbigem Hintergrund hinzufügen, indem Sie die Zahlen kombinieren. So erstellen Sie blauen Text mit grauem Hintergrund, der durch die Verwendung unterstrichen und hervorgehoben wird:
Prost,
/ B2S
quelle
Wenn Sie gerne ein BASH-Skript installieren möchten
ack
, verfügt dashhlighter
Paket über nützliche Standardfarben und eine einfache Benutzeroberfläche. Https://github.com/paoloantinori/hhighlighter :Sie können es so verwenden, um Zeilen hervorzuheben, die beginnen mit
FAIL
:oder die enthalten
FAIL
:oder für verschiedene gängige Protokolleinträge:
Und natürlich für eine einzelne Farbe (rot) mit einfachem Grep:
Das
^
passt zu jeder Zeile, ist aber ein spezieller Matcher und druckt die gesamte Zeile. Der hervorzuhebende Ausdruck wird nach a definiert|
. Weitere Ausdrücke können hinzugefügt werden, solange sie durch getrennt sind|
.quelle