ZSH / BASH: Löschen Sie bestimmte Zeilen aus der Historie


0

Meine Geschichte ist mit einigen bestimmten Zeilen, die Tippfehler und ähnliches enthalten, "verschmutzt". Zum Beispiel: Ich muss oft auf einen bestimmten Server wie folgt ssh:

ssh foo-bar@domain.tld
> Connects succesfully

Manchmal mache ich auch einen Tippfehler:

ssh bar-foo@domain.tld
> Permission denied

Da ich mich auf die Historie verlasse, wird dieser Tippfehler mehrmals dupliziert:

cat .zsh_history | grep bar-foo@domain.tld
> : 1510301683:0;ssh bar-foo@domain.tld
> : 1511166682:0;ssh bar-foo@domain.tld
> : 1511193552:0;ssh bar-foo@domain.tld
> : 1512730972:0;ssh bar-foo@domain.tld
> : 1516368993:0;ssh bar-foo@domain.tld
> : 1516802690:0;ssh bar-foo@domain.tld
> : 1519633368:0;ssh bar-foo@domain.tld

Gibt es eine einfache Möglichkeit, meine Geschichte allein durch die Ergebnisse der Bereinigung? grep -Befehl? (Oder gibt es vielleicht eine andere, cleverere Lösung?)

Aktualisieren:

Hinweis: Ich suche keine Möglichkeit, eine Zeile zu löschen x aus der geschichte; Ich weiß, dass es viele Artikel gibt, die das abdecken. Ich suche einfach nach einer (einfachen?) Methode, um alle Zeilen zu löschen, die String enthalten y.



Ich bin mir nicht sicher, ob es sich um ein Duplikat handelt. Ich möchte nur meinen Verlauf bereinigen, indem ich alle Zeilen lösche, die eine Zeichenfolge enthalten x. Die verknüpfte Frage ist, wie nach Zeilennummern gelöscht werden soll.
Giel Berkers

Möglicherweise interessiert Sie die Option zsh HIST_IGNORE_ALL_DUPS Um keine Duplikate in Ihrem Verlauf zu speichern: Wenn eine neue Befehlszeile, die der Verlaufsliste hinzugefügt wird, eine ältere dupliziert, wird der ältere Befehl aus der Liste entfernt (auch wenn es sich nicht um das vorherige Ereignis handelt).
mpy

@GielBerkers, Entfernen Sie eine bestimmte Zeile aus der Bash-Verlaufsdatei scheint ziemlich allgemein zu sein, mit Antworten auf verschiedene Arten. Das einfachste grep Verlegenheit ist in a Kommentar von * mivk , die die benötigten Befehle ausgeben (ohne sie tatsächlich auszuführen): history | grep XYZ | grep -v grep | tac | awk '{print "history -d", $1}'
agc

Antworten:


0

Mit diesem Befehl können Sie alle Zeilen mit der Zeichenfolge im Verlauf ordnungsgemäß löschen:

sed -i '/string/d' .bash_history
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.