查看一系列 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 更容易

相關內容