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


9

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

大きな履歴ファイルがあり、頻繁に使用しています

history | grep somecommand

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

今のところ私はこれを行います:一致する、言う4992 somecommand、それから

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

通常はこれで十分ですが、もっと正確に行うといいでしょう。つまり、4972から5012までのコマンド、つまり20コマンドの前後に表示されます。

もっと簡単な方法があるのだろうか?カスタムスクリプトは正常に動作していると思われますが、おそらく他の誰かが以前に似たようなことをしたことがあります。


履歴操作のために、2つのビルトインがあります:gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
リトルエンシェントフォレストカミ

回答:


13

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

history | grep -B 3 -A 5 somecommand

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

ただし、多くの場合、事前に必要な行数を正確に知ることはできません。そのため、lessを使用して内部を検索します。コマンドラインから検索を開始することもできます。

history | less +/somecommand

1
と非常にクールなトリックless!あなたがそれができるとは知らなかった
ウォーレン

本当にいい...探しているコマンドの「周り」を見ることができます。特に探しているわけではありませんが、別の関連コマンドを使用したときにそれを使用したことを覚えています。良いものtnx。
ハリルガルバウイ

8

fcを試してください:

fc -l 4972 5012

...これはbash組み込みコマンドです。(だからtcshで試さないでください:>)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.