該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 更容易