查看一系列 bash 历史记录

查看一系列 bash 历史记录

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 ..

答案1

history您可以使用fc,它允许您选择范围:

fc -l 4 7

答案2

如果你必须使用历史命令,通过 sed 或 awk 进行管道传输:

history | sed -n '10,20p'

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

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

答案3

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

例如,我正在寻找我所做的事情ping mybox,大约 20 行。

$ history | grep "ping mybox" 20325 ping mybox

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

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

答案4

如果您必须使用“history”,对于历史记录第 4-7 行,这是一个更正确的基于 sed 的版本:

history | sed '/^4 /,/^7 /!d;/^7 /q'

这捕获了原始发布者打印历史记录的第 n 行的意图,而不是历史命令输出的第 n 行。几乎所有时候,两者都不相同。例如,这个历史输出中发布者关心的数字:

... 20 preceding lines.
12134 ls dataDir
12135 ls myDir
12136 ls something
... some more lines

是 12134,12135,12136,而不是 21,22,23,sed 命令应该捕获它,在本例中是这样的:

history | sed '/^12134 /,/^12135 /!d;/^12135 /q'

数字的具体格式:

'/^n[space]/'

捕获数字位于行开头且后跟空格的意图。 (当我看到这个时,我认为这个空间是不必要的,但它让我感觉更好,哈。)

是的,正如 @G.Gabunia 上面所说,fc 更容易

相关内容