Não acredito que haja uma maneira fácil de adicionar algo a ^string1^string2 para fazer com que bash substitua todas as ocorrências. Como o slm ressalta, você tem que escrever !!:gs/string1/string1 .
Mas em zsh , você pode adicionar apenas :G :
$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar
Em bash e zsh , você também pode usar fc -s da seguinte forma:
$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar
Isso geralmente é feito em um alias chamado r , então você pode fazer:
$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar