
Wie kann ich Verlaufseinträge in einem bestimmten Bereich abrufen/filtern?
Ich habe eine große Verlaufsdatei und verwende häufig
history | grep somecommand
Nun, mein Gedächtnis lässt ziemlich nach, und ich möchte auch sehen, was ich sonst noch getan habe, als ich den Befehl eingegeben habe.
Im Moment mache ich Folgendes: hole mir ein Match, sage 4992 somecommand
, dann mache ich
history | grep 49[0-9][0-9]
das reicht normalerweise aus, ich würde es aber lieber genauer machen, also die Befehle von 4972 bis 5012 anzeigen, also 20 Befehle davor und 20 danach.
Ich frage mich, ob es einen einfacheren Weg gibt. Ich vermute, ein benutzerdefiniertes Skript wäre angebracht, aber vielleicht hat jemand anders schon einmal etwas Ähnliches gemacht.
Antwort1
Sie können angeben, grep
dass einige Zeilen rund um die Übereinstimmung gedruckt werden sollen, z. B. 3 davor und 5 danach:
history | grep -B 3 -A 5 somecommand
grep -C 4
ist äquivalent zu grep -A 4 -B 4
.
Aber oft wissen Sie nicht im Voraus, wie viele Zeilen Sie genau benötigen. Verwenden Sie also „less“ und suchen Sie innerhalb dieser Zeilen. Sie können die Suche auch von der Kommandozeile aus starten:
history | less +/somecommand
Antwort2
Versuchen Sie es mit fc:
fc -l 4972 5012
... es ist ein in Bash integrierter Befehl. (Versuchen Sie es also nicht in tcsh :>)
Antwort3
versuchenhistory | grep -C20 '^4992'