Bash:选择与模式匹配的上一个命令

时间:2009-03-20 07:46:47

标签: bash shell

我知道使用向上和向下箭头的bash历史导航。

我想要一种懒惰的方法来选择一个匹配某些正则表达式的前一个命令(比整个命令短,因此输入的时间更短)。

是否可以使用bash?

如果没有,其他外壳是否有这样的功能?

3 个答案:

答案 0 :(得分:4)

Zsolt,避免使用硬编码的文件名,改为使用HISTFILE变量,如果你真的是偏执,则使用后备:$ {HISTFILE: - 〜/ .bash_history}; - )

为什么要直接通过历史文件??您将丢失历史记录编号,这是复制命令所必需的(例如!33以再次执行历史记录中的第33个条目),而无需复制和粘贴grep的输出。

请记住,使用这种$ @扩展可能会在各种(史诗)级别失败。例如,以“ - ”(histgrep -h)开头的参数通常会挂起,或者自己开枪。实际上,这个基本的例子可以很容易地解决,遵循从选项中分离参数的经典“ - ”方法,但讨论没有结束,记住参数被提供给那个黑客将是正则表达式。 ; - )

哦,并不是histgrep某种过于冗长的选择? h,i,Tab,g,Tab:)

恕我直言,我会坚持使用^ R,回到历史| grep ......必要时。 无论如何,为了这个例子,我(懒惰地)重写了这个小帮手:

function hgrep() { history | grep -P -- "$*"; }

答案 1 :(得分:3)

您始终可以使用CTRL-R向后搜索历史记录,并键入上一个命令的某些部分。再次点击CTRL-R(在第一次点击后)会重复您的查询(如果有的话,跳转到下一场比赛)。

我个人用它进行正则表达式搜索(因为正在进行正则表达式搜索(AFAIK)):

# search (using perl regexp syntax) your entire history
function histgrep()
{
     grep -P $@ ~/.bash_history
}   

修改 要通过该功能搜索最新的历史记录项,请参阅this(关于设置$ PROMPT_COMMAND)。

答案 2 :(得分:2)

请参阅我的回答here

示例:

$echo happy
happy
$!?pp?
happy