So erhalten Sie den Bash-Shell-Verlaufsbereich


9

Wie kann ich Verlaufseinträge in einem bestimmten Bereich abrufen / filtern?

Ich habe eine große Verlaufsdatei und benutze sie häufig

history | grep somecommand

Jetzt ist mein Gedächtnis ziemlich schlecht und ich möchte auch sehen, was ich sonst noch getan habe, als ich den Befehl eingegeben habe.

Im Moment mache ich das: Holen Sie sich Match, sagen wir 4992 somecommand, dann mache ich

history | grep 49[0-9][0-9]

Das ist normalerweise gut genug, aber ich würde es viel lieber genauer machen, das heißt, Befehle von 4972 bis 5012 sehen, das sind 20 Befehle vorher und 20 nachher.

Ich frage mich, ob es einen einfacheren Weg gibt? Ich vermute, ein benutzerdefiniertes Skript ist in Ordnung, aber vielleicht hat jemand anderes schon einmal etwas Ähnliches getan.


Für die Manipulation des Verlaufs gibt es zwei integrierte Funktionen: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK sagt Reinstate Monica

Antworten:


13

Sie können festlegen grep, dass einige Zeilen rund um das Spiel gedruckt werden sollen, z. B. 3 vor und 5 nach:

history | grep -B 3 -A 5 somecommand

grep -C 4ist äquivalent zu grep -A 4 -B 4.

Aber oft wissen Sie nicht genau, wie viele Zeilen Sie im Voraus möchten. Verwenden Sie also weniger und suchen Sie darin. Sie können die Suche sogar über die Befehlszeile starten:

history | less +/somecommand

1
sehr cooler Trick mit less! Ich wusste nicht, dass du das kannst
Warren

Sehr schön in der Tat ... Ich kann "um" den Befehl sehen, den ich suche, auch wenn ich nicht wirklich speziell danach suche, aber ich erinnere mich, ihn verwendet zu haben, als ich einen anderen relevanten Befehl verwendet habe! Gutes Zeug tnx.
Khalil Gharbaoui

8

Versuchen Sie fc:

fc -l 4972 5012

... es ist ein eingebauter Bash-Befehl. (also versuche es nicht in tcsh:>)


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.