Unix commandline history substitution ^foo^bar (for multiple replacements)

Jesper Rønn-Jensen picture Jesper Rønn-Jensen · Feb 17, 2010 · Viewed 7.1k times · Source

Occasionally I use the bash command to replace string in previous command:

^foo^bar

Today I wanted to make the replacement in the following line for replacing all occurrences of checkbox with `radio:

$ git mv _product_checkbox_buttons.html.erb _product_checkbox_button.html.erb
$ ^checkbox^radio
git mv _product_radio_buttons.html.erb _product_checkbox_button.html.erb

So it only replaces the first occurrence. How do I make it replace all occurrences?

bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Answer

dubiousjim picture dubiousjim · Feb 17, 2010

man bash says ^old^new is equivalent to !!:s/old/new/. You want !!:gs/old/new/ to globally replace.