Bash: Replace all occurrences of a word in the last command
Almost by mistake, I figured out you could do something like:
$ cp foo.data bar1.data
$ ^bar1^bar2
And that runs the same command with bar2.data
instead of bar1.data
. Now, how about if I have multiple occurrences of the target word? For example:
$ cp foo.data bar.data
$ ^data^index
It only replaces the first data
extension. How do I get it to replace both?
I think ^data^index
is equivalent to !!:s/data/index
, so it will only substitute the first word. If you want the whole line substituted, I think you'll have to use !!:gs/data/index/
You can do it by adding ^:& to the end.
^:& will replace two occurrences
^:g& will replace all
$ cp foo.data bar.data $ ^data^index^:& $ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data $ ^data^index^:g& $ cp foo.index bar.index joe.index doe.index
sidenote: in the book 'command line kungfu'
it says that ^:& will replace all