如何从 bash 历史记录中删除选定的结果?

如何从 bash 历史记录中删除选定的结果?

history命令显示所有结果,但我们可以使用 进行过滤以获取特定命令history | grep searchingCommand。这真的很有帮助。

但问题是它还会显示那些输入错误或不成功的命令。然后识别正确的命令确实很麻烦。我检查了这个链接:在终端中选择命令历史记录?但这不是我的解决方案。

那么有没有办法从历史记录中删除那些在输入时或之后不正确的命令?

答案1

使用:

history -d OFFSET

删除偏移量处的历史记录条目OFFSET,甚至在将其添加到 bash 历史记录文件之前。要找出正确的OFFSET,您只需运行history命令。它是从包含要删除的历史记录条目的行的开头开始的数字。

要保存修改历史记录,请使用:

history -w

详细内容请参见本指南

答案2

编辑文件~/.bash_history并删除有拼写错误的部分

例如插入此命令:

gedit ~/.bash_history

编辑你喜欢的内容,然后保存文件并重新启动终端。root 命令是:

sudo -i 
inser your password
gedit ~/.bash_history

如果你想删除所有history -c应该可以解决问题


句法

history
history [n]
history -c
history -d offset
history [-anrw] [filename]
history -ps arg

钥匙

-c 清除历史列表。这可以与其他选项结合使用,以完全替换历史列表。

-d offset 删除位于 offset 位置的历史记录条目。offset 应按显示历史记录时所示指定。

-a 将新的历史记录行(自当前 Bash 会话开始以来输入的历史记录行)附加到历史记录文件。

-n 将尚未从历史文件读取的历史行附加到当前历史列表。这些是自当前 Bash 会话开始以来附加到历史文件的行。

-r 读取当前历史文件并将其内容附加到历史列表中。

-w 将当前历史记录写入历史文件。

-p 对参数执行历史替换并将结果显示在标准输出上,而不将结果存储在历史列表中。

-s 参数作为单个条目添加到历史列表的末尾。

来源

答案3

警告 (03/05/23):

我原来的回答中描述的方法并不安全。滚动到这篇文章的底部可以查看更多信息。


(原帖)

我想添加另一种修改(或删除)历史记录条目的方法,这是我在使用 bash 时偶然发现的:

为了演示这一点,首先在 bash 中执行以下三个命令:

$ echo 1
1
$ echo 2
2
$ echo 3
3

您现在可以使用箭头键或Ctrl+pCtrl+再次选择这些命令n

假设您要修改前两个命令。浏览历史记录直到echo 1出现并将其更改为echo 1 - changed,但不要按 Enter 键。如果您现在进一步浏览历史记录,此行将保持其已修改状态,您可以离开并返回。现在移动到行echo 2并将其更改为echo 2 - changed,同样不要按 Enter 键。为了保存对这些行的更改,请选择历史记录中除这两个命令之外的任何命令,然后按Ctrl+ c

当然,除了修改历史记录条目,您还可以删除它,这样该条目处将出现一个空行。要删除当前提示符下显示的行,请按Ctrl+ e(跳转到行尾),然后按Ctrl+ u(删除从行首到光标处的文本)。

也可以看看https://unix.stackexchange.com/questions/195668/what-c​​an-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726以获得更详细的技术背景解释。


(Saurav Kumar 于 2018 年 6 月 2 日添加)

最简单的方法:

  1. ctrl+r搜索要删除/修改的命令。
  2. end选择搜索到的命令进行删除/修改
  3. 删除或修改所选命令(不要按enterctrl+ c
  4. 向上箭头(或ctrl+ p)或向下箭头(或ctrl+ n)选择任何其他命令。
  5. ctrl+c 就是这样!

笔记

这只会更改当前会话命令。如果我们想更改旧命令并保存更改,我们需要在关闭终端之前运行以下命令:

history -w

(2023 年 5 月 3 日添加)

假设您刚刚以错误的方式输入并执行了一条命令,并且想要更改或删除历史记录中的错误行。那么您可能会转到该行并进行更改(例如修复拼写错误),使其包含正确的命令,然后按下+ ,这样正确的命令就会保存在该行上。但是,如果您现在转到该行并执行Ctrlc,旧行将重新出现在其原始位置。

解决此问题的一种方法是:转到错误的行并更正它,然后按Alt+ 。这会将正确的命令作为注释附加到当前历史记录列表中。现在您可以按照上述方式删除错误的行。之后,您可以按、、、(或+ 、+ 、+ 、 )#执行更正后的命令。HomeDelCtrlpCtrlaCtrld

警告:您必须避免在删除命令时点击或关闭终端,否则它将被保存到历史文件中。消除这种风险的一种方法是使用

 history -d -2

(请注意命令开头的前导空格)而不是按照原始答案中描述的方式删除错误的行。-2如果您在执行错误命令后立即执行上述步骤,则此选项有效。否则,请使用更大的数字。

答案4

删除多行(例如从 1974 到 1990,使用history命令检查):

  for i in `seq 1974 1990` ; do history -d 1974 ; done

请注意,要删除的行号始终是相同的,因为您会不断删除该行并转到下一行。

相关内容