さまざまなbash履歴を表示する


30

この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 ..

最後のxコマンドをリストしてからにパイプできますhead
ブラッチリー

@Bratchley:そのためには、最後のコマンドをいくつ送るかを知る必要があります。これを考慮して、履歴にhistory | grep something番号が付けられ123 234 345たコマンドの結果を示していますが、最後に実行されたコマンドの数がわかりません(historyこの場合)。私の最後のコマンドには、400、500などの番号を付けることができます。最初にその数を確認し、違いを把握し、最後のxコマンドをリストし、次にパイプする必要がありますhead
Slartibartfast

回答:


52

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

fc -l 4 7

4
のように、最後からカウントする負の数値も受け入れますfc -l -16 -10
フランクリンゆう

うーん、なぜ実際のコマンドの引数だけでなく、まったく新しいコマンドが必要なのか不思議に思います...
リンゴ

10

historyコマンドを使用する必要がある場合は、sedまたはawkを介してパイプします。

history | sed -n '10,20p'

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

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


6
私たちは悪い選択肢に夢中なので、との組み合わせはheadtailこの問題をよりエレガントな方法で解決します。10-> 25の範囲では、を使用する必要がありますhistory | head 25 | tail 15
アーロン

1

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

たとえば、私は私が周りにしたことを探しています ping mybox 20行で。

$ history | grep "ping mybox" 20325 ping mybox

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

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


(1)「20前後」と言いますが、例は-5と+14を示しています。(2)履歴番号には先行スペースがあるように見えるので、これは私には機能しません。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.