9

How can I get/filter history entries in a specific range?

I have a large history file and frequently use

history | grep somecommand

Now, my memory is pretty bad and I also want to see what else I did around the time I entered the command.

For now I do this: get match, say 4992 somecommand, then I do

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

this is usually good enough, but I would much rather do it more precisely, that is see commands from 4972 to 5012, that is 20 commands before and 20 after.

I am wondering if there is an easier way? I suspect, a custom script is in order, but perhaps someone else has done something similar before.

13

You can tell grep to print some lines surrounding the match, e.g., 3 before and 5 after:

history | grep -B 3 -A 5 somecommand

grep -C 4 is equivalent to grep -A 4 -B 4.

But often you won't know precisely how many lines you want in advance. So use less and search inside it. You can even launch the search from the command line:

history | less +/somecommand
  • 1
    very cool trick with less! Didn't know you could do that – warren Oct 4 '10 at 23:22
  • Very nice indeed... I can see "around" the command I'm looking for, even when I'm not really looking for it specifically but I remember using it when I used another relevant command! Good stuff tnx. – Khalil Gharbaoui Apr 2 at 16:44
8

Try fc:

fc -l 4972 5012

... it is a bash builtin command. (so don't try it in tcsh :>)

4

try history | grep -C20 '^4992'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.