この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
もし、あんたがしなければならないhistory コマンドを使用し、それを 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'
これは、元の投稿者が 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の方が簡単です