web-dev-qa-db-ja.com

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

historyの代わりに、 fc を使用して範囲を選択できます。

fc -l 4 7
58
cuonglm

must履歴コマンドを使用する場合は、sedまたはawkを介してパイプします。

history | sed -n '10,20p'

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

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

11
G.Gabunia

探しているコマンドの前後に行番号にgrepを付けて履歴を使用すると、自分に最適です。

たとえば、私はping myboxを中心に何をしたかを探しています。多かれ少なかれ20行です。

$ history | grep "ping mybox" 20325 ping mybox

これは20325の行なので、[20320..20339]の範囲の数字で始まる行をgrepするだけです。

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

1
Luc Yriarte