如何从历史记录中删除一行?


Answers:


338

预防措施

如果要运行命令而不将其保存在历史记录中,请在命令前添加多余的空间

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

为此,您需要ignorespace或者ignoreboth中的一个HISTCONTROL。例如,运行

HISTCONTROL=ignorespace

要使此设置持久化,请将其放在中.bashrc

验尸清理

如果您已经运行了该命令,并且想要将其从历史记录中删除,请首先使用

history

显示历史记录中的命令列表。找到您要删除的号码旁边的数字(例如1234)并运行

history -d 1234

此外,如果您要删除的行已被写入$ HISTFILE(通常默认情况下在结束会话时会发生),则需要写回$ HISTFILE,否则在打开新行时该行会重新出现会议:

history -w

有效。我认为我们需要在修改〜/ .bashrc之后将其来源...
B 2012年

3
@ jw013我将PROMPT_COMMAND设置为history -a,在这种情况下,它已被写入历史文件,而不是在正常配置下退出时。具体来说:mywiki.wooledge.org/BashFAQ/088
jordanm 2012年

5
删除一行之后,您需要使用将当前历史记录写到$ HISTFILE中history -w。否则,当您退出时,删除的行仍然存在!
费利佩·阿尔瓦雷斯

1
+1以上评论;使用history -wafter history -d {num}正是我所需要的-关键提示应该添加到答案中,否则用户可能会认为从当前shell中临时删除实际上是永久的。
迈克尔(Michael)

1
history -w对于已经写入.bash_history文件的条目,@ BobStein 是必需的。如何复制(例如,在具有股票配置的CentOS 7上):1.登录2.输入命令echo foo3.注销4.再次登录5.删除echo foo6.退出的条目。7.再次登录:条目仍然存在。根据您配置Bash历史记录的方式,也许您可​​以通过其他方式重现此问题-例如,如果您在注销之前引起历史记录写入。
maxschlepzig

53
  1. 要清除所有历史记录,请使用

    history -c
  2. 要删除一行,请使用

    history -d linenumber

6

我在~/.bashrc其中,这使得$ forget命令从历史记录中删除前一个命令

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

这似乎有点复杂。会不会history -d $( history | tail -n 1 | cut -f 1 -d " " )更简单?
seumasmac

1
history | tail -n1history命令本身,因此删除该数字将得到错误的输入。但是,history -d $( history | awk 'END{print $1-1}' )将行选择,字段选择和减法结合在一起。
dave_thompson_085

有人可以帮忙将其移植到zshell吗?
Alex S

6

您始终可以编辑和删除中的条目~/.bash_history,当您想删除一个或多个条目时很有用


2
退出外壳程序时,很可能会重新引入这些条目。
l0b0

5

如果您想忘记整个bash会话,则可以kill使用当前的bash进程。由于变量$$持有pid当前shell的,您可以执行以下操作:

kill -9 $$

1

清除历史记录后,您需要写入更改。而且,如果您不想在历史记录中包含历史记录擦除命令,那么您需要运行以下命令:

history -c && history -w && logout

祝好运。


-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.