
この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
探してみました。[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
21,22,23ではなく、12134,12135,12136です。この場合、sedコマンドはそれをキャプチャする必要があります。
history | sed '/^12134 /,/^12135 /!d;/^12135 /q'
数値の具体的な形式:
'/^n[space]/'
数字が行の先頭にあり、その後にスペースがあるという意図を捉えます。 (これ見てスペースが不要だと思いましたが、気分が良くなりますね、ハ。)
はい、上記の@G.Gabuniaが言ったように、fcはより簡単です。