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

800
Giel Berkers

Meine Geschichte ist mit einigen bestimmten Zeilen, die Typos haben, "verschmutzt". Zum Beispiel: Ich muss oft ssh auf einen bestimmten Server wie folgt:

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 rein durch die Ergebnisse des grepBefehls zu bereinigen ? (oder vielleicht gibt es eine andere, schlauere Lösung?)

Aktualisieren:

Bitte beachten Sie: Ich suche keine Möglichkeit, die Zeile xaus der Historie zu löschen . Ich weiß, dass es viele Artikel gibt, die das abdecken. Ich suche einfach nach einer (einfachen?) Methode, um alle Zeilen zu löschen, die Zeichenfolgen enthalten y.

0
Mögliches Duplikat von [Eine bestimmte Zeile aus der Bash-Verlaufsdatei entfernen] (https://superuser.com/questions/384366/remove-a-certain-line-from-bash-history-file) agc vor 6 Jahren 0
Nicht sicher, ob es sich um ein Duplikat handelt. Ich möchte nur meine Geschichte bereinigen, indem ich alle Zeilen lösche, die die Zeichenfolge "x" enthalten. Die verknüpfte Frage ist, wie man nach Zeilennummern löscht. Giel Berkers vor 6 Jahren 0
Möglicherweise interessiert Sie die Option ** HIST_IGNORE_ALL_DUPS ** von zsh, um überhaupt keine Duplikate in Ihrem Verlauf zu speichern: Wenn eine neue Befehlszeile zur Verlaufsliste hinzugefügt wird, wird ein älterer Befehl dupliziert, sogar der ältere Befehl wird entfernt wenn es nicht das vorherige Ereignis ist). mpy vor 6 Jahren 0
@GielBerkers, [Eine bestimmte Zeile aus der Bash-Verlaufsdatei entfernen] (https://superuser.com/questions/384366/remove-a-certain-line-from-bash-history-file) scheint ziemlich allgemein zu sein, wobei die Antworten verschiedene verwenden Methoden. Der einfachste `grep`-Fix ist ein [Kommentar von * mivk] (https://superuser.com/questions/384366/remove-a-certain-line-from-bash-history-file#comment878325_529193), der ausgedruckt wird die benötigten Befehle (ohne sie tatsächlich auszuführen): `history | grep XYZ | grep -v grep | tac | awk '' ` agc vor 6 Jahren 0

1 Antwort auf die Frage

0
mafiaman42

Sie können diesen Befehl verwenden, um alle Zeilen mit der Zeichenfolge im Verlauf ordnungsgemäß zu löschen:

sed -i '/string/d' .bash_history