如何在命令行历史记录中搜索以前使用过的命令?

除了查看历史记录外,有没有办法过滤我的历史记录?

假设我想搜索以“ssh”开头的命令?

Ctrl + R并键入sshCtrl + R将从最近的命令开始搜索到旧的命令(反向搜索)。 如果您有多个以ssh开头的命令,请sshCtrl + R直到找到匹配项。

找到匹配后,可以按Enter执行命令,或按左/右光标选择命令文本。

Ctrl + R没有默认的反向选项来反转搜索的方向,但在这里你会找到一些关于它的建议。

如果您只想搜索历史记录,可以使用history | grep ssh history | grep ssh ,用ssh代替你要搜索的内容。

Ctrl + R将启动“反向搜索”模式,输入“ssh”会在历史记录中搜索包含“ssh”的命令。

我对上面的内容略有不同,对我来说效果很好(如果你指的是你的bash历史

在我的主文件夹中,我创建一个名为的文件

 .inputrc 

里面就是这样

 "\e[5~": history-search-backward "\e[6~": history-search-forward 

注意:上面的内容似乎不再适用于14.04,所以这也是一样的 –

 "\e[A":history-search-backward "\e[B":history-search-forward 

然后键入我希望的前一个命令,并使用页面向上/页面dn按钮搜索历史记录,始终从页面向上开始

这是使用经典命令的另一种方法(更有可能跨发行版工作)。 命令历史记录存储在主目录中的.bash_history文件中,因此您可以执行以下操作:

 grep "ssh" ~/.bash_history 

如果您需要不区分大小写的搜索,请不要忘记-i标志。

我在互联网上的某个地方找到了以下function,并使用它产生了很大的效果。 把它放在~/.bashrc

 hgrep () { history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@" } 

现在重新加载你的shell: exec bash 。 您现在有了一个新命令,您可以这样使用:

 hgrep ssh 

它将显示历史记录中匹配命令的列表。 要运行命令,请键入! 后跟命令编号。 这是一个例子:

 ~:$ hgrep scp 207 tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log . 421 tn scp scott-laptop __HOST__:Scott\ Severance.asc . 422 tn scp scott-laptop __HOST__:'Scott\ Severance.asc' . 468 tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds 469 tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds 470 scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds ~:$ !207 

我比Ctrl + R更喜欢这种方法,因为它允许更灵活的搜索,我可以一次看到多个结果。

把它放在~/.bashrc

别名hgrep =’历史| grep –color = auto’

例:

如果在Emacs ( Mx shell )中使用shell,则可以使用Mr (它相当于终端中的Ctrl + R )。

历史很好但有限 – 我更喜欢设置我的bash环境,以便记录我运行的所有命令,以及运行它们的目录。然后我运行命令列出所有命令我已经在当前目录中运行,我可以管道grep等 – 它被称为’dish’看到:

https://github.com/wolfwoolford/dish

如果你想切入追逐,只需在你的.bashrc中找到它( https://github.com/wolfwoolford/dish/blob/master/dishrc

还有一个非常有用的命令,你可以免费获得名为’dishg’ – 或dish global – 它打印出所有运行的命令,无论目录如何。 显然这个只在与grep和tail等一起使用时才有用……

我已经使用它多年了,而且每当我设置一个新盒子时,它确实是我安装的第一件事。 它将您运行的命令记录到隐藏目录(〜/ .dish)中的文本文件中。我从未遇到过磁盘空间问题……

想把它写成@ssmy的评论,但无法在评论中得到合作的格式。

通过历史搜索history | grep ssh history | grep ssh然后你可以通过输入带有感叹号的数字来执行你想要的命令,例如!42

例:

 $ history |  grep ssh
   5 ssh me@someserver.net
  13 ssh me@someotherserver.net
  42 ssh me@thisone.com
 $!42