查看一系列的bash历史记录


30

history命令列出了当前会话的所有历史记录。喜欢:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

为了寻找感兴趣的项目,我可以管historygrep

history | grep ls
1 ls
6 ls
10 ls

我还可以查看最后3个命令,例如:

history 3
11 history
12 history | grep ls
13 history 3

但是,如何获得特定范围的历史记录?例如:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..

您可以列出最后的x命令,然后将其传递到head
布拉奇利

@Bratchley:为此,我必须知道要执行的最后几个命令。考虑到这一点,我history | grep something显示123 234 345了历史中编号命令的结果,并且我可能不知道最后执行的命令的数量(history在这种情况下)。我的上一个命令可以编号为400、500或其他编号。因此,我首先必须检查该数字,找出差异,列出最后一个x命令,然后通过管道发送至head
Slartibartfast

Answers:


52

history可以使用代替,fc选择范围:

fc -l 4 7

4
它甚至接受负数从末开始计数,例如fc -l -16 -10
富兰克林于

嗯,想知道为什么我们需要一个全新的命令,而不仅仅是实际命令的参数……
林戈

10

如果必须使用历史记录命令,则将其通过sed或awk传递:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

否则,cuonglm的答案是更好的选择。


6
由于我们遇到了不好的选择,因此将head和组合使用tail将以一种不太优雅的方式解决此问题。对于10-> 25的范围,您必须使用history | head 25 | tail 15
亚伦

1

在我正在寻找的命令周围的行号上使用带有grep的历史记录最适合我。

例如,我正在寻找大约ping mybox20行左右的内容。

$ history | grep "ping mybox" 20325 ping mybox

那是一行,20325所以我只需要grep 行,就必须以[20320..20339]范围内的数字开头。

$ history | grep ^203[2-3][0-9]


(1)您说“或多或少20”,但是您的示例显示-5和+14。(2)这对我不起作用,因为历史数字似乎有前导空格。
斯科特(Scott)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.