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

Sau*_*mar 72 bash

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

但问题是它也显示了那些输入错误或不成功的命令。然后确定正确的真的很痛苦。我检查了这个链接:终端中的选择性命令历史?但这不是我的解决方案。

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

小智 157

用:

history -d OFFSET
Run Code Online (Sandbox Code Playgroud)

OFFSET即使在将历史条目添加到您的 bash 历史文件之前,也可以删除偏移处的历史条目。要找出正确的OFFSET,您只需要运行history命令。它是包含要删除的历史条目的行开头的编号。

并保存对历史使用的修改:

history -w
Run Code Online (Sandbox Code Playgroud)

本指南中查看更多详细信息。

  • 这应该是正确答案。 (20认同)
  • @SauravKumar 不错?!?可能是最好的办法…… (10认同)
  • 首先阅读:为了清楚起见,您必须执行“history -w”后记以保存更改。此外,OFFSET 表示“history”显示的数字。如果您尝试删除的行是 873,则使用“history -d 873”。 (5认同)
  • @RaduRădeanu 在 `history -d` 之后使用 `history -w` 来保存更改。 (2认同)

bla*_*899 23

编辑文件~/.bash_history并删除有错别字的一次

例如,插入以下命令:

gedit ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

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

sudo -i 
inser your password
gedit ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

如果你想删除所有history -c应该做的伎俩


句法

history
history [n]
history -c
history -d offset
history [-anrw] [filename]
history -ps arg
Run Code Online (Sandbox Code Playgroud)

钥匙

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

-d offset 删除位置偏移处的历史条目。应在显示历史记录时指定偏移量。

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

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

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

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

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

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

来源

  • @KasiyA 在 `history -c` 之后使用 `history -w` 来编写更改。 (2认同)

Ste*_*cke 22

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

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

$ echo 1
1
$ echo 2
2
$ echo 3
3
Run Code Online (Sandbox Code Playgroud)

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

假设您要修改前两个命令。在历史记录中移动,直到echo 1出现并将其更改为echo 1 - changed,但不要按 ENTER。如果您现在进一步浏览您的历史记录,该行将保持其修改状态,您可以移开和移回它。现在移到该行echo 2并将其更改为echo 2 - changed,再次不要按回车键。为了保存对这些行的更改,选择历史记录中除这两条之外的任何命令,然后点击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以获得更详细的解释技术背景。

最简单的方法:

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

注意

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

history -w
Run Code Online (Sandbox Code Playgroud)


Sto*_*rux 16

如果你想立即从同一个终端中删除它,你必须将以下内容添加到你的 ~/.bashrc 文件中。

PROMPT_COMMAND='history -a' 
Run Code Online (Sandbox Code Playgroud)

重新启动您的终端。

您可以将它添加到 .bashrc 文件中的任何位置。我已添加如下以及其他与历史相关的内容。

在此处输入图片说明

通常在 bash 会话期间,执行的命令不会写入 .bash_history,直到会话终止,因此PROMPT_COMMAND='history -a'将命令输入到 .bash_history 中。

现在,每当您在命令中犯错误或错误并想删除它时,只需执行以下命令

sed -i '$d' ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

和tada 它将被删除。

为了使它更简单,您可以将其别名为更简单的东西并使用它,例如

alias rh ='sed -i '\''$d'\'' ~/.bash_history'
Run Code Online (Sandbox Code Playgroud)

因此执行rh将从历史记录中删除最后执行的命令。

以上是临时别名,仅持续一个会话。要使其永久或持久添加

alias rh = 'sed -i '\''$d'\'' ~/.bash_history' 
Run Code Online (Sandbox Code Playgroud)

到 .bashrc

笔记

两边不应该有任何空间 =

如果您不想别名,那么您还可以执行以下操作

创建一个命令名称rh并将其放在/bin目录中:

  • 打开一个文件说rh并粘贴以下代码,保存并关闭:

    sed -i '$d' ~/.bash_history

  • 制作rh可执行文件并将其放在/bin目录中:

     chmod +x rh
     须藤cp rh / bin 
  • 现在使用rh命令从历史记录中删除最近的命令。