web-dev-qa-db-ja.com

Bashシェルの履歴範囲を取得する方法

特定の範囲の履歴エントリを取得/フィルタリングするにはどうすればよいですか?

私は大きな履歴ファイルを持っており、頻繁に使用します

history | grep somecommand

今、私の記憶はかなり悪いです、そして私はまた私がコマンドを入力した頃に私が他に何をしたかを見たいです。

今のところ私はこれを行います:一致を取得し、4992 somecommandと言ってから、

history | grep 49[0-9][0-9]

通常はこれで十分ですが、もっと正確に実行したいと思います。つまり、4972から5012までのコマンド、つまり前に20コマンド、後に20コマンドを参照してください。

もっと簡単な方法があるのだろうか?カスタムスクリプトが適切だと思いますが、おそらく他の誰かが以前に同様のことをしたことがあります。

9
Aniti

grepに、一致を囲むいくつかの行を出力するように指示できます。たとえば、前に3行、後に5行です。

history | grep -B 3 -A 5 somecommand

grep -C 4grep -A 4 -B 4と同等です。

しかし、多くの場合、事前に必要な行数が正確にわからないことがあります。したがって、使用量を減らして内部を検索してください。コマンドラインから検索を開始することもできます。

history | less +/somecommand

Fcを試してください:

fc -l 4972 5012

...これはbashの組み込みコマンドです。 (したがって、tcshで試さないでください:>)

8
Rondo

history | grep -C20 '^4992'をお試しください

4
Casual Coder