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

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

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

履歴ファイルが大きく、頻繁に使用する

history | grep somecommand

さて、私の記憶はかなり悪く、コマンドを入力した頃に他に何をしたかを確認したいです。

今のところはこうしています: マッチを取得して、 と言って4992 somecommand、次に

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

通常はこれで十分ですが、私はもっと正確に、つまり 4972 から 5012 までのコマンド、つまりその前の 20 コマンドと後の 20 コマンドを確認したいと思います。

もっと簡単な方法があるかどうか疑問に思っています。カスタム スクリプトが必要なのではないかと思いますが、おそらく他の誰かが以前に同様のことをしたことがあるでしょう。

答え1

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

history | grep -B 3 -A 5 somecommand

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

しかし、必要な行数が事前に正確にわからないことがよくあります。そのため、less を使用してその内部を検索します。コマンド ラインから検索を開始することもできます。

history | less +/somecommand

答え2

fc を試してください:

fc -l 4972 5012

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

答え3

試すhistory | grep -C20 '^4992'

関連情報