Necesito eliminar todos los comandos en mi historial que coinciden con una cadena. He intentado:
$ 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)
¿Cuál es la forma correcta de hacer esto?
bash
text-processing
command-history
xargs
linuxfix
fuente
fuente
history -d X
. Encontré esta pregunta porque acababa de hacerlohistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Sin error, pero nada eliminado. ¿Alguien puede explicar por qué?Respuestas:
El
history
comando solo opera en su archivo de historial,$HISTFILE
(típicamente~/.history
o~/.bash_history
). Será mucho más fácil si solo elimina las líneas de ese archivo, lo que se puede hacer de muchas maneras.grep
es una forma, pero debe tener cuidado de no sobrescribir el archivo mientras lo sigue leyendo:Otra forma es con
sed
:fuente
$HISTFILE
podría contener espacios, probablemente valga la pena citarlo.La respuesta de Michael Mrozek funcionará si no te importa eliminar comandos de la sesión actual. Si lo hace, debe escribir en el archivo de historial antes de realizar las operaciones en su publicación haciendo
history -a
.Además, después de haber eliminado las entradas que desea de su archivo de historial, puede volver a cargarlo emitiendo
history -c
, luegohistory -r
.fuente
Basado en las respuestas de Michael y Chris , se me ocurrió lo siguiente. Agréguelo a su
~/.bashrc
archivo y luego cárguelo con. ~/.bashrc
osource ~/.bashrc
.fuente
Para aquellos que buscan una línea:
Entonces, si quisieras, por ejemplo. elimine varias líneas con una contraseña, simplemente reemplace "SEARCH_STRING_GOES_HERE" con la contraseña. Esto buscará en todo tu historial esa cadena de búsqueda y la eliminará.
2 cosas a tener en cuenta
fuente
Esto funcionó para mí. history -c && history -a no volvió a cargar el archivo de historial correctamente para mí. Entonces, en cambio, salgo de mi sesión justo después de reescribir el archivo de historial para que el que está en la memoria no lo sobrescriba.
fuente