さまざまな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

興味のあるアイテムを検索するには、次のよう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

の代わりにhistoryfc範囲を選択できます:

fc -l 4 7

答え2

もし、あんたがしなければならないhistory コマンドを使用し、それを sed または awk にパイプします。

history | sed -n '10,20p'

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

それ以外の場合は、cuonglm の回答がより良い選択肢です。

答え3

履歴の使用行番号をgrepする探しているコマンドの周辺が私にとっては最適です。

たとえば、私がping mybox20 行程度で行った操作を探しています。

$ 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'

これは、元の投稿者が history コマンドの出力の n 行目ではなく、履歴の n 行目を印刷する意図を捉えています。ほとんどの場合、この 2 つは同じではありません。たとえば、この履歴出力で投稿者が気にしている数字は次のとおりです。

... 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の方が簡単です

関連情報