How to remove a single line from history?
I’m working in Mac OSX, so I guess I’m using bash…?
Sometimes I enter something that I don’t want to be remembered in the history. How do I remove it?
Preventative measures
If you want to run a command without saving it in history, prepend it with an extra space
prompt$ echo saved
prompt$ echo not saved
> # ^ extra space
For this to work you need either ignorespace
or ignoreboth
in HISTCONTROL
. For example, run
HISTCONTROL=ignorespace
To make this setting persistent, put it in your .bashrc
.
Post-mortem clean-up
If you’ve already run the command, and want to remove it from history, first use
history
to display the list of commands in your history. Find the number next to the one you want to delete (e.g. 1234) and run
history -d 1234
Additionally, if the line you want to delete has already been written to your $HISTFILE (which typically happens when you end a session by default), you will need to write back to $HISTFILE, or the line will reappear when you open a new session:
history -w
-
To clear all your history, use
history -c
-
To delete a single line, use
history -d linenumber
I have this in my ~/.bashrc
, which makes the command $ forget
delete the previous command from history
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^s*d+') - 1);
}
You always can edit and remove entries from ~/.bash_history
, useful when you want to remove either one entry or more than one entry
If you want to forget the entire bash session, you can kill
the current bash process. Since the variable $$
hold the pid
of the current shell, you can do:
kill -9 $$
You need to write the changes after you cleared the history. And if you wouldn’t like to have the history wipe command in your history then you need to run the command like that:
history -c && history -w && logout
Good luck.
If you want to delete a range of history lines, you can use the script below.
This example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done
To remove a single line from the history file, use the -d option. For example, if you want to clear a command where you entered the clear-text password as in the scenario above, find the line number in the history file and run this command.
$ history -d 2038
To delete or clear all the entries from bash history, use the history command below with the -c option.
$ history -c
Alternatively, you can use the command below to delete the history of all last executed commands permanently in the file.
$ cat /dev/null > ~/.bash_history
Also With Bash 5, you can delete a range aswell
history -d 511-520
1- in bash terminal type
history
# This will list all commands in history .bash_history file with line numbers
ex:
...
987 cd
988 ssh x@127.0.0.1
990 exit
991 cd
2- pick the CMD line number you want to delete
history -d 988
Note: if you want to delete for example last 3 CMDs, just pick the third line number from bottom ex: 988 and repeat the CMD history -d 988
3 times in sequence.
Quick steps:
- Find out where is your terminal’s history file with
echo $HISTFILE
- Open the file with your text editor
- Delete the sensitive lines you find there
- Save the file
- Close and reopen your terminal
- DONE: your history is clean! You can validate that by running the
history
command in your terminal
In Ubuntu (but I’m pretty sure, it will be work for other Linux distributions and also MacOS the same way) the bash history file can be simply edited in an arbitrary text editor:
$ nano ~/.bash_history
If you don’t know, where it’s stored, you can find it as follows:
$ echo $HISTFILE
Or you can just do it a bit more generic way:
$ nano $HISTFILE
Zsh on Mac
If you are using Zsh, history -d linenumber
doesn’t work to delete a specific line number in the command line history. However you can edit the history file. Close and reopen your terminal and edit the history like so:
nano ~/.zsh_history
See this for more details.
If you have hstr
(a way better reverse-i-search
that can be installed with sudo apt install hstr
), then it’s really simple:
- Open your terminal and press
Ctrl+r
to search your history. - Type some characters to search for the command you want to delete from your history, then use arrow keys to go down and highlight the item.
- Press the
delete
key, and pressy
to confirm.