One thing that I love about bash is that there is never a shortage of new tips and tricks to learn. I have been using bash for over 10 years now and just stumbled on this little trick.
This one (as the title implies) allows you to quickly substitute a string into the previous command and rerun the command with the substitution.
Quick substitution is officially part of the Bash Event Designators mechanism and is a great way to fix a typo from a previous command. Below is an example.
# Simple example to highlight substitutions echo foo # This will replace the string "foo" with "bar" and rerun the last command ^foo^bar
This shorthand notation is great for most use cases, with the exception of needing to replace multiple instances of a given string. Luckily that is easily addressed with the Event Designators expanded substitution syntax, shown below.
# This will substitute ALL occurrences of foo in the previous command !!:gs/foo/bar/ # Slightly different syntax allows you to do the same thing in ZSH ^foo^bar^:G
The syntax is slightly more complicated in the first example but should be familiar enough to anyone that has used sed and/or vim substitutions, and the second example is almost identical to the shorthand substitution.
Taking things one step further, we can actually edit the previous command to fix anything more than a typo of different argument. fc is actually a bash builtin function so it is available almost everywhere.
fc is especially useful for dealing with very long, complicated commands.
# Oops, we messed this up echo fobarr | grep bar # To fix it, just open the above in your default editor fc # when you write and quit the file it will put the contents into your current command
There are many great tutorials available so I would recommend looking around to see all the options and get more ideas.