Existem muitas maneiras de esfolar esse gato!
Para substituir uma sequência específica, ^old^new^extraexecute o comando anterior, substitua oldpor newe acrescente extra. Você pode parar o quanto quiser; por exemplo ^old, substituirá olda sequência vazia e acrescentará a sequência vazia (essencialmente excluindo olde não fazendo mais nada).
1. ^diff^checkout
2. ^cat^rm
Variante especialmente útil disso:
for i in `seq 1 10`; do echo something complicated; done
# inspect the output to see if it looks right
^echo
Para substituir uma palavra específica, você pode usar !m:n-ppara se referir às palavras natravés pdo comando m(números negativos uso de contar para trás a partir do comando atual). Você pode omitir a -pparte para se referir a uma única palavra e omitir a :m-pparte para se referir a um comando inteiro. Formulários especiais !!para !-1, !$para a última palavra do comando anterior e !*para os argumentos (exceto a palavra 0) do comando anterior são bastante úteis.
1. !!:0 checkout !!:2-
2. rm !*
Costumo usar os dois; O zsh é especialmente bom aqui, pois pressionar a tecla tab expandirá as coisas enigmáticas para garantir que você esteja certo.
Também existem muitas maneiras de fazer isso com a edição de linhas. Leia as combinações de teclas do seu shell.