Ich muss alle Befehle in meinem Verlauf löschen, die einer Zeichenfolge entsprechen. Ich habe es versucht:
$ history | grep searchstring | cut -d" " -f2 | history -d
-bash: history: -d: option requires an argument
$ history | grep searchstring | cut -d" " -f2 | xargs history -d
xargs: history: No such file or directory
$ temparg() { while read i; do "$@" "$i"; done }
$ history | grep searchstring | cut -d" " -f2 | temparg history -d
(no error, but nothing is deleted)
Was ist der richtige Weg, um dies zu tun?
bash
text-processing
command-history
xargs
linuxfix
quelle
quelle
history -d X
. Ich bin auf diese Frage gestoßen, weil ich es gerade getan hattehistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Kein Fehler, aber nichts gelöscht. Kann jemand erklären, warum?Antworten:
Der
history
Befehl wird nur für Ihre Verlaufsdatei ausgeführt$HISTFILE
(normalerweise~/.history
oder~/.bash_history
). Es ist viel einfacher, wenn Sie einfach die Zeilen aus dieser Datei entfernen, was auf viele Arten möglich ist.grep
Dies ist eine Möglichkeit, aber Sie müssen darauf achten, die Datei nicht zu überschreiben, während Sie sie noch lesen:Ein anderer Weg ist mit
sed
:quelle
$HISTFILE
könnte Leerzeichen enthalten, die es wahrscheinlich wert sind, zitiert zu werden.Die Antwort von Michael Mrozek funktioniert, wenn Sie keine Lust haben, Befehle aus der aktuellen Sitzung zu entfernen. Wenn Sie dies tun, sollten Sie in die Verlaufsdatei schreiben, bevor Sie die Vorgänge in seinem Beitrag ausführen
history -a
.Auch nachdem Sie die Einträge entfernt , die Sie aus Ihrer History - Datei möchten, können Sie es durch die Ausgabe neu zu laden
history -c
, dannhistory -r
.quelle
Basierend auf den Antworten von Michael und Chris habe ich Folgendes gefunden. Fügen Sie es Ihrer
~/.bashrc
Datei hinzu und laden Sie es dann mit. ~/.bashrc
odersource ~/.bashrc
.quelle
Für diejenigen, die einen Einzeiler suchen:
Wenn Sie also z. Löschen Sie mehrere Zeilen mit einem Passwort. Ersetzen Sie einfach "SEARCH_STRING_GOES_HERE" durch das Passwort. Dadurch wird der gesamte Verlauf nach dieser Suchzeichenfolge durchsucht und gelöscht.
2 Dinge, die Sie beachten sollten
quelle
Das hat bei mir funktioniert. history -c && history -a hat die Verlaufsdatei für mich nicht richtig neu geladen. Stattdessen beende ich meine Sitzung direkt nach dem Überschreiben der Verlaufsdatei, damit diese von der gespeicherten nicht überschrieben wird.
quelle