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?

Asked By: B Seven

||

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
Answered By: jw013
  1. To clear all your history, use

    history -c
    
  2. To delete a single line, use

    history -d linenumber
    
Answered By: soumyaranjan

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);              
}
Answered By: Ryan Haining

You always can edit and remove entries from ~/.bash_history, useful when you want to remove either one entry or more than one entry

Answered By: Weslor

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 $$
Answered By: Bruno Bronosky

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.

Answered By: user882786

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
Answered By: Praveen Kumar BS

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

Answered By: champion-runner

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.

Answered By: KhogaEslam

Quick steps:

  1. Find out where is your terminal’s history file with echo $HISTFILE
  2. Open the file with your text editor
  3. Delete the sensitive lines you find there
  4. Save the file
  5. Close and reopen your terminal
  6. DONE: your history is clean! You can validate that by running the history command in your terminal
Answered By: marcelosalloum

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
Answered By: automatix

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.

Answered By: Suragch

If you have hstr (a way better reverse-i-search that can be installed with sudo apt install hstr), then it’s really simple:

  1. Open your terminal and press Ctrl+r to search your history.
  2. 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.
  3. Press the delete key, and press y to confirm.
Answered By: joe