O Bash chama isso de substituição rápida . Está na seção "Expansão do Histórico" da página man do Bash, na seção "Event Designators" ( manual on-line ):
^string1^string2^
Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to
!!:s/string1/string2/
Portanto, ^foo^bar
executaria o comando executado anteriormente, mas substituiria a primeira ocorrência de foo
por bar
.
Note que, para s/old/new/
, a página do bash man diz "A final
delimitador é opcional se for o último caractere do
linha de evento. "É por isso que você pode usar ^foo^bar
e não é necessário usar ^foo^bar^
.
(Consulte esta resposta para um monte de outros designadores, embora eu não tenha mencionado isso aqui.