L'un de mes trucs Unix préférés est ^x^y
, qui prendra la dernière commande et remplacera la première instance de "x" par "y". Cependant, je me demande si une astuce similaire fonctionne pour remplacer toutes les instances de "x" par "y" dans la dernière commande?
Vous pouvez utiliser le !!:gs/search/replace/
notation pour faire ce que vous voulez. Il utilise la recherche globale et le remplacement (:gs
):
avant
$ echo "harm warm swarm barm"
harm warm swarm barm
après
$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born
Je ne pense pas qu'il existe un moyen simple d'ajouter quelque chose à ^string1^string2
pour que bash
remplace chaque occurrence. Comme le souligne slm, vous devez écrire !!:gs/string1/string1
.
Mais dans zsh
, vous pouvez simplement ajouter :G
:
$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar
Dans les deux bash
et zsh
, vous pouvez également utiliser fc -s
comme ça:
$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar
Ceci est souvent transformé en un alias appelé r
donc vous pouvez simplement faire:
$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar
Je pense que la meilleure option est d'utiliser ": &"
$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat