tags:

views:

241

answers:

4

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 ^".

+4  A: 

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

R Samuel Klatchko
+4  A: 

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/
Adam Rosenfield
+1  A: 

Caret substitution and other similar shortcuts are found in the Event Designators subsection of the HISTORY EXPANSION section of the bash(1) man page.

Ignacio Vazquez-Abrams
A: 
^word^  ........... erase word
^word^^ ........... delete everything until the end of the line