DEV Community

Using grep and history command to find previous commands in Linux

Asim Dahal on August 10, 2019

You input command in your linux terminal which is very long and hard to remember. It is needed to input the command again to the terminal. You find...
Collapse
 
ferricoxide profile image
Thomas H Jones II

If you know the command you're trying to repeat, then !<starting-string> is great. Similarly, if you know the command you're trying to repeat, but you need to modify it, !<starting-string>:s/<SEARCH>/<REPLACE> or even !<starting-string>:gs/<SEARCH>/<REPLACE> are freaking awesome.

Note: This type of advanced command-history usage works in BASH and CSH-derived shells. Dunno about other shell-families.

Collapse
 
darkes profile image
Victor Darkes

Big fan of using history, I'd be lost if I didn't have it. My personal way of accessing it on Macs is by using Ctrl + R and that let's you do pretty much the same thing as the grep method and you don't have to do the second line to execute the expression. Give it a try!

Collapse
 
programmist profile image
Tony Childs

If your .bash_history file is large (as mine is), piping the output of the history command to grep can be very slow. For example, my current history file is over 100k lines, and it takes 10+ seconds (on my machine) for the command to complete.

A faster method is to simply grep the file directly, which takes under 1 second:

grep xcrun ~/.bash_history
Enter fullscreen mode Exit fullscreen mode

Or, even better, set up a function to do this:

# hg - History grepping function
hg () {
    grep "$1" ~/.bash_history
}
Enter fullscreen mode Exit fullscreen mode

then:

hg xcrun
Enter fullscreen mode Exit fullscreen mode

Or if you use Ripgrep (As I do):

hg () {
    rg "$1" ~/.bash_history
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
ayoubbougue profile image
ayoub bougue

super useful,thanks for sharing