Der Bash- history
Befehl ist sehr cool. Ich verstehe, warum die Zeilennummern angezeigt werden, aber gibt es eine Möglichkeit, den Befehl history aufzurufen und die Zeilennummern zu unterdrücken?
Hier geht es darum, den Befehl history zu verwenden. Bitte antworten Sie nicht cat ~/.bash_history
Aktueller Output:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Gewünschte Ausgabe:
man history
ls
ll
clear
cd ~
history
Vielen Dank an alle für Ihre großartigen Lösungen. Pauls ist das einfachste und wird für mich funktionieren, da meine Bash-Verlaufsgröße auf 2000 festgelegt ist.
Ich wollte auch einen coolen Artikel teilen, den ich heute Morgen gefunden habe. Es gibt einige gute Optionen, die ich jetzt verwende, z. B. doppelte Einträge aus dem Bash-Verlauf herauszuhalten und sicherzustellen, dass mehrere Bash-Sitzungen die Verlaufsdatei nicht überschreiben: http://blog.macromates.com/2008/working-with -Geschichte-in-Bash /
cat ~/.bash_history
ausgeschlossen ist?Antworten:
Versuche dies:
quelle
history
Befehls weiterleiten, anstatt die Datei zu lesen?man cut
. Es werden die ersten 7 Zeichen jeder Ausgabezeile deshistory
Befehls gelöscht . Es sollte nur Probleme, wenn die Zahl 99.999 überschreitet, etwas , das ich nie gesehen habe (und ich verwende Muscheln viel ). Aber wenn Sie darüber besorgt sind:history | sed 's/^ *[0-9]* *//'
cut
auffüllt, und jetzt ist die Syntax sinnvoller :) Vielen Dank an @Keith Thompson für Ihre Lösung, die für> 100.000 Historien funktioniert.awk
kann helfen:Diese Antwort kann fehlschlagen, wenn Sie eine lange Geschichte haben.
quelle
substr
ist so viel einfacher, ich habehistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'
für meine verwendet !!Ich bin mir ziemlich bewusst, dass diese Frage für Bash ist und viele Leute es vorziehen würden, nicht zu zsh zu wechseln (Cue Downvotes ...)
Wenn Sie jedoch bereit waren, zu zsh zu wechseln, unterstützt zsh dies nativ (sowie andere Optionen für die Verlaufsformatierung).
(Siehe /server/114988/removing-history-or-line-numbers-from-zsh-history-file )
quelle
fc
ist auch einbash
eingebauter. Der einzige Unterschied ist, dass die erste Zeile ist1
, so wäre esfc -ln 1
Ich bin spät dran, aber die kürzere Methode wäre, Folgendes in Ihre
~/.bashrc
oder Ihre~/.profile
Datei einzufügen:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
Von Bash
manpage
:Mit dieser Funktion besteht ein Smart Hack darin, die Variable "print" zu einem Wagenrücklauf (
\r
) zu machen und die Zeile (ANSI-CodeK
) anstelle eines tatsächlichen Zeitstempels zu löschen .quelle
HISTTIMEFORMAT=$'\r\e[K'
HISTTIMEFORMAT=$'\r\e[K' history
Alternativ können Sie sed verwenden:
Mit dem Alias können Sie dies als Standard festlegen (in Ihr bash_profile einfügen):
quelle
\+
in einem grundlegenden regulären Ausdruck ist nicht POSIX-konform. Verwenden\{1,\}
Siesed
diese Option, wenn Sie die nicht standardmäßige\+
Erweiterung nicht unterstützen .Obwohl das Schneiden mit der
-c
Option für die meisten praktischen Zwecke funktioniert, denke ich, dass die Weiterleitung der Historie an awk eine bessere Lösung wäre. Beispielsweise:ODER
Beide Lösungen machen dasselbe. Die Ausgabe der Geschichte wird an awk weitergeleitet. Awk löscht dann die erste Spalte aus, die den Zahlen in der Ausgabe des Verlaufsbefehls entspricht. Hier ist awk bequemer, da Sie sich nicht um die Anzahl der Zeichen im Zahlenteil der Ausgabe kümmern müssen.
print $0
ist gleichbedeutend mitprint
, da standardmäßig alles gedruckt wird, was in der Zeile angezeigt wird. Die Eingabeprint $0
ist expliziter, aber welche Sie wählen, liegt bei Ihnen. Das Verhalten vonprint $0
und einfachprint
bei Verwendung mit awk ist offensichtlicher, wenn Sie awk zum Drucken einer Datei verwendet haben (cat
wäre schneller zu tippen als awk, aber dies dient zur Veranschaulichung eines Punktes).[Bsp.] Verwenden von awk, um den Inhalt einer Datei mit $ 0 anzuzeigen
[Bsp.] Verwenden von awk, um den Inhalt einer Datei ohne explizite $ 0 anzuzeigen
[Beispiel] Verwenden von awk, wenn die Verlaufszeile mehrere Zeilen umfasst
quelle
Aus der Ausgabe von
history --help
:Es schreibt den aktuellen Verlauf in die angegebene Datei -
/dev/stdout
in diesem Fall.quelle
history
Befehl hat keine Option zum Unterdrücken von Zeilennummern. Sie müssen mehrere Befehle kombinieren, wie alle vorschlagen:Beispiel:
quelle
sed
trotzdem durchlaufen möchten, ist der anfängliche Schnitt überflüssig - fügen Sie ihn stattdessen einfach dem Ausdruck hinzu.Vielleicht möchten Sie https://github.com/dvorka/hstr ausprobieren, das das Filtern des Bash-Verlaufs im "Box-Stil" mit (optionaler) metrikbasierter Reihenfolge ermöglicht, dh es ist sowohl in Vorwärts- als auch in Rückwärtsrichtung viel effizienter und schneller:
Es kann leicht an Ctrl-rund / oder gebunden werdenCtrl-s
quelle
Sie können den Befehl verwenden
cut
, um es zu lösen:Schneiden Sie Felder aus STDIN oder Dateien aus.
Schneiden Sie die ersten 16 Zeichen jeder STDIN-Zeile aus:
cut -c 1-16
Schneiden Sie die ersten 16 Zeichen jeder Zeile der angegebenen Dateien aus:
cut -c 1-16 file
Schneiden Sie alles vom 3. Zeichen bis zum Ende jeder Zeile aus:
cut -c3-
Schneiden Sie das fünfte Feld jeder Zeile aus, indem Sie einen Doppelpunkt als Feldtrennzeichen verwenden (Standardtrennzeichen ist die Registerkarte):
cut -d':' -f5
Schneiden Sie das 2. und 10. Feld jeder Zeile mit einem Semikolon als Trennzeichen aus:
cut -d';' -f2,10
Schneiden Sie die Felder 3 bis 7 jeder Zeile aus, wobei Sie ein Leerzeichen als Trennzeichen verwenden:
cut -d' ' -f3-7
quelle
Ich weiß, dass ich zu spät zur Party komme, aber das ist viel einfacher zu merken:
quelle