我想知道是否可以执行历史记录中与某个正则表达式匹配的命令?我知道你可以做类似的事情
fc 232 248
它将进入你的history
,然后连续进行修订232-248。
但是,如果中间的某些命令是我不想做的事情,有没有办法可以指定它?现在我查找我的history
并将其输出到grep
history | grep checkout
因此,这将查找我通过结账完成的所有终端操作。
232 git checkout master files/file1.txt
234 git checkout master files/file2.txt
248 git checkout master files/file3.txt
它过滤掉了一些数字,所以我只想执行那些已经通过管道输出的数字。而不是介于两者之间的一切
答案1
要从 bash执行包含特定字符串(例如"checkout"
)或正则表达式(例如)的所有命令:"checkout.+file\d"
history
grep -E "string_exp" $HOME/.bash_history | while read line; do eval "$line"; done
您可以将其另存为函数~/.bashrc
:
#!/bin/bash
all_prev () {
grep -E "$1" $HOME/.bash_history | while read line; do eval "$line"; done
}
然后以后您只需输入:
all_prev checkout
编辑:
为了避免在
.bash_history
文件随着时间的推移积累这些命令时运行许多重复的命令,请确保export HISTCONTROL=ignoredups
已设置~/.bashrc
(如果尚未设置)。为了避免
all_prev
每次都重新运行包含搜索词的搜索,请使用正则表达式^
并$
在行的开头和结尾指定字符。