Preciso excluir todos os comandos do meu histórico que correspondem a uma string. Eu tentei:
$ 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)
Qual é a maneira certa de fazer isso?
bash
text-processing
command-history
xargs
linuxfix
fonte
fonte
history -d X
. Me deparei com essa pergunta porque tinha acabado de fazerhistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Nenhum erro, mas nada excluído. Alguém pode explicar o porquê?Respostas:
O
history
comando apenas opera no seu arquivo de histórico$HISTFILE
(normalmente~/.history
ou~/.bash_history
). Será muito mais fácil se você apenas remover as linhas desse arquivo, o que pode ser feito de várias maneiras.grep
é uma maneira, mas você deve tomar cuidado para não sobrescrever o arquivo enquanto ainda o lê:Outra maneira é com
sed
:fonte
$HISTFILE
poderia conter espaços, provavelmente vale a pena citá-lo.A resposta de Michael Mrozek funcionará se você não se importar em remover comandos da sessão atual. Se fizer isso, você deve gravar no arquivo de histórico antes de executar as operações em sua postagem
history -a
.Além disso, depois de remover as entradas que deseja do seu arquivo de histórico, você pode recarregá-lo emitindo e
history -c
, em seguidahistory -r
.fonte
Com base nas respostas de Michael e Chris , criei o seguinte. Adicione-o ao seu
~/.bashrc
arquivo e carregue-o com. ~/.bashrc
ousource ~/.bashrc
.fonte
Para quem procura uma linha:
Então, se você quisesse, por exemplo. exclua várias linhas com uma senha, simplesmente substitua "SEARCH_STRING_GOES_HERE" pela senha. Isso pesquisará todo o seu histórico por essa sequência de pesquisa e a excluirá.
2 coisas para estar ciente
fonte
Isso funcionou para mim. history -c && history -a não recarregou o arquivo de histórico corretamente para mim. Então, em vez disso, saio da minha sessão logo após reescrever o arquivo de histórico, para que o que está na memória não o substitua.
fonte