
特定の範囲の履歴エントリを取得/フィルタリングするにはどうすればよいですか?
履歴ファイルが大きく、頻繁に使用する
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'