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 [email protected]
> Connects succesfully

Manchmal mache ich auch einen Tippfehler:

ssh [email protected]
> Permission denied

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

cat .zsh_history | grep [email protected]
> : 1510301683:0;ssh [email protected]
> : 1511166682:0;ssh [email protected]
> : 1511193552:0;ssh [email protected]
> : 1512730972:0;ssh [email protected]
> : 1516368993:0;ssh [email protected]
> : 1516802690:0;ssh [email protected]
> : 1519633368:0;ssh [email protected]

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.

Giel Berkers
quelle
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
mafiaman42
quelle