我知道使用向上和向下箭头的bash历史导航。我想用一种懒惰的方式来选择与某个正则表达式匹配的前一个命令(比整个命令短,所以键入时间更短)。有可能用bash吗?如果没有,其他贝壳是否有这样的特点?
von4xj4u1#
您可以使用CTRL-R来向后搜索历史记录,并键入前一个命令的某些部分。再次命中CTRL-R(在第一次命中之后)会重复您的查询(如果有,则跳到下一个匹配项)。就我个人而言,我使用这个正则表达式搜索(因为正则表达式搜索是不可能的(AFAIK)):
CTRL-R
# search (using perl regexp syntax) your entire history function histgrep() { grep -P $@ ~/.bash_history }
**编辑:**有关通过该函数搜索最近的历史记录项目,请参见this(关于设置$PROMPT_COMMAND)。
ffdz8vbo2#
Zsolt,避免使用硬编码的文件名,使用HISTFILE变量,如果你真的很偏执,还有一个备用方法:${历史文件:-~/.bash_历史} ;- )为什么要直接在历史文件中执行grep?!这样会丢失历史记录编号,而历史记录编号是复制命令所必需的(例如!33用于再次执行历史记录中的第33个条目),而不必复制粘贴grep的输出。请记住,使用这种$@扩展可能会在不同的(史诗级)级别。例如,以“-”开头的参数(histgrep -h)通常会挂起,或者搬起石头砸自己的脚。实际上,这个基本的例子可以很容易地解决,遵循经典的“--”方式将arguments与options分开,但是讨论没有结束,记住提供给黑客的参数是正则表达式。- )哦,难道histgrep不是一个太冗长的选择吗?h,i,Tab,g,Tab:)恕我直言,我会坚持使用^R,回到历史上来|grep......无论如何,为了这个例子,我(懒洋洋地)将这个小助手重写为:
arguments
options
function hgrep() { history | grep -P -- "$*"; }
wsewodh23#
在此查看我的答案示例:
$echo happy happy $!?pp? happy
3lxsmp7m4#
我更喜欢这个解决方案,因为除了通过regex搜索之外,可以看到整个历史的所有内容,regex-type是根据vim的非常好的regex引擎:
vim -u /root/.vimrc -M + <( history )
这我已经在这我的职位:https://unix.stackexchange.com/questions/718828/search-in-whole-bash-history-list-with-full-featured-regex-engine此致安东·韦塞尔
4条答案
按热度按时间von4xj4u1#
您可以使用
CTRL-R
来向后搜索历史记录,并键入前一个命令的某些部分。再次命中CTRL-R
(在第一次命中之后)会重复您的查询(如果有,则跳到下一个匹配项)。就我个人而言,我使用这个正则表达式搜索(因为正则表达式搜索是不可能的(AFAIK)):
**编辑:**有关通过该函数搜索最近的历史记录项目,请参见this(关于设置$PROMPT_COMMAND)。
ffdz8vbo2#
Zsolt,避免使用硬编码的文件名,使用HISTFILE变量,如果你真的很偏执,还有一个备用方法:${历史文件:-~/.bash_历史} ;- )
为什么要直接在历史文件中执行grep?!这样会丢失历史记录编号,而历史记录编号是复制命令所必需的(例如!33用于再次执行历史记录中的第33个条目),而不必复制粘贴grep的输出。
请记住,使用这种$@扩展可能会在不同的(史诗级)级别。例如,以“-”开头的参数(histgrep -h)通常会挂起,或者搬起石头砸自己的脚。实际上,这个基本的例子可以很容易地解决,遵循经典的“--”方式将
arguments
与options
分开,但是讨论没有结束,记住提供给黑客的参数是正则表达式。- )哦,难道histgrep不是一个太冗长的选择吗?h,i,Tab,g,Tab:)
恕我直言,我会坚持使用^R,回到历史上来|grep......无论如何,为了这个例子,我(懒洋洋地)将这个小助手重写为:
wsewodh23#
在此查看我的答案
示例:
3lxsmp7m4#
我更喜欢这个解决方案,因为除了通过regex搜索之外,可以看到整个历史的所有内容,regex-type是根据vim的非常好的regex引擎:
这我已经在这我的职位:
https://unix.stackexchange.com/questions/718828/search-in-whole-bash-history-list-with-full-featured-regex-engine
此致
安东·韦塞尔