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

Viewed 7114

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.
2 Answers

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

An easy way of doing this would be:

fc -s checkbox=radio

I have an alias r defined in my .bashrc:

alias r='fc -s'

Then what you want to do becomes:

r checkbox=radio

See my answer to "hidden features of bash" question for details.

Related