Wenn ich z. B. benutze cat file.txt | grep --color=tty "pattern"
, wird das von mir gesuchte Muster hervorgehoben. Als ich um jeden Treffer etwas mehr Kontext will, hat grep die -A
, -B
und -C
Parameter.
Ich möchte jedoch die gesamte Datei (oder eine beliebige Befehlsausgabe) anzeigen und ein bestimmtes Muster hervorheben. Existiert ein solcher Markierungsbefehl oder ein solches Werkzeug?
linux
command-line
DerMike
quelle
quelle
Antworten:
Auf unix.stackexchange.com gab es eine Antwort , die diesen tollen Trick hatte:
oder
welches Ihrem Muster oder dem Zeilenende in jeder Zeile entspricht. Nur das Muster wird hervorgehoben.
quelle
GREP_OPTIONS='--color'
zu Ihrer hinzu~/.bashrc
(oder ändern Sie die Einstellung, um sie einzuschließen--color
). Sie müssen ein neues Terminal starten oder diese Zuweisung in der Befehlszeile des aktuellen Terminals ausführen, damit sie wirksam wird.Ich mag ack .
Es ist wie grep, aber besser. Es wird standardmäßig hervorgehoben und mit der
--passthru
Option wird die gesamte Datei (oder Standardeingabe) anstatt nur der übereinstimmenden Zeilen angezeigt .quelle
tail
, müssen Sie auch die--filter
Option verwenden. Zum Beispiel:tail -f myLogFile | ack --filter --passthru pattern
Ich empfehle auch die Verwendung von
less
(oder so), aber ich möchte Ihnen eine didaktischere Lösung zeigen. Nachdem Sie diese Funktion definiert haben:Sie können es folgendermaßen verwenden:
Hinweis: Diese Version ist Groß- und Kleinschreibung, zu , dass nur Anfügen zu ändern ,
i
nachdemg
in demsed
Ausdruck.quelle
tput
die Werte aufrufen, anstatt sie fest zu codieren. Auf diese Weise vermeiden Sie auch die Verwendungecho -e
, die andere Auswirkungen haben kann.prog | highlight "pattern"
highlight "pattern" file
highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
sed
Fähigkeiten sind im Grunde nicht vorhanden. Wie müsste ich das ändern, um das Muster case sensitive anzupassen. Wie auch immer, ich werde das zu meinen bash_functions hinzufügen. Vielen Dank.Vorbei
-C
angrep
mit einem ausreichend hohen Wert wird dies zu tun.quelle
less
hebt Muster hervor, alsooder
und dann in weniger
/
, um nach einem Muster zu suchen, das hervorgehoben wird.Randnotiz:
Sie können Ihren Befehl verbessern, z. B.
einen Alias festlegen
alias grep="grep --color=tty"
und ihn folgendermaßen verwenden:quelle
grep
(zgrep, bzgrep, bzfgrep usw.) verwendet. Wenn Sie also möchten, dass sich alle Formen von grep konsistent verhalten, müssen Sie für jede Form von grep einen Alias festlegen. @ Casuals neue Antwort oben ist nichts für etwas wiebzgrep pattern /var/log/messages.?.gz
, was ein Beispiel ist, bei dem die Hervorhebung von Farben SEHR hilfreich ist.Es gibt ein nettes Supercat- Tool, das genau diesen Zweck erfüllt . Es kann sowohl die Konsolenausgabe einfärben als auch einen "hervorgehobenen" HTML-Code aus Ihrer Eingabe erzeugen.
quelle
/etc/supercat
Werfen Sie einen Blick auf die Konfigurationsdateien (in Ubuntu), in denen die Farbregeln festgelegt sind. Es handelt sich im Grunde um Farb- / Regexp-Paare (mit einigen zusätzlichen Regeln). Manpage ist auch kurz und nett.spcrc
vim- Syntaxdatei