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

Bla*_*man 246 command-line

除了查看历史记录,还有什么方法可以过滤我的历史记录?

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

Pri*_*ley 346

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

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

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


小智 121

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

  • 我使用这种方法,因为我链接到列表中查看与我的过滤器匹配的每个命令。 (2认同)

dou*_*oug 18

我对上面做了一些细微的变化,对我来说效果很好(如果你指的是你的 bash 历史

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

.inputrc
Run Code Online (Sandbox Code Playgroud)

里面是这个

"\e[5~": history-search-backward
"\e[6~": history-search-forward
Run Code Online (Sandbox Code Playgroud)

注意:上面的内容在 14.04 中似乎不再起作用,所以它做同样的事情 -

"\e[A":history-search-backward
"\e[B":history-search-forward
Run Code Online (Sandbox Code Playgroud)

然后输入我希望的许多以前的命令并使用 page up/page dn 按钮搜索历史记录,总是从 page up 开始


Ser*_*gey 13

Ctrl+R将启动“reverse-i-search”模式,输入“ssh”将在您的历史记录中搜索包含“ssh”的命令。


Dis*_*oat 11

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

grep "ssh" ~/.bash_history
Run Code Online (Sandbox Code Playgroud)

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


Sco*_*nce 6

我在网上找到了以下功能,并使用它效果很好。把这个放在你的~/.bashrc

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}
Run Code Online (Sandbox Code Playgroud)

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

hgrep ssh
Run Code Online (Sandbox Code Playgroud)

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

~:$ 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
Run Code Online (Sandbox Code Playgroud)

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