该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
为了搜索感兴趣的项目,我可以history
用grep
类似的管道
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 更容易