How can I replace ALL instances of a string in the previous command in Bash? [duplicate]
If I have just entered the following command in Bash:
echo foo
I can change foo to bar by typing:
^foo^bar
Which results in the following command being executed:
echo bar
Now if I enter:
echo foo foo
Is there a way to change both instances of foo to bar just by using the caret (^
) operator?
Additionally, are there man pages for shell operators like ^
? man ^
results in "No manual entry for ^".
Solution 1:
That particular feature is called quick substitution; its documentation can be found in the Event Designators section of the Bash Manual. You can't do what you want with quick substitution; you'll have to resort to something slightly more verbose:
!!:gs/foo/bar/
Solution 2:
Nor sure how to do it with caret substitution, but here's how you do it with history:
!!:gs/foo/bar/
Let me break that down:
!! - reruns the last command. You can also use !-2 to run two commands ago, !echo to run the last command that starts with echo
:gs says to do a global (all instances) search/replace. If you wanted to just do replace the first instance, you would use ':s'
Finally, /foo/bar/ says to replace foo with bar