it-swarm.com.de

^ x ^ y Unix-Trick für alle Instanzen im letzten Befehl?

Einer meiner Lieblings-Unix-Tricks ist ^x^y, der den letzten Befehl übernimmt und die erste Instanz von "x" durch "y" ersetzt. Ich frage mich jedoch, ob ein ähnlicher Trick funktioniert, um alle Instanzen von "x" im letzten Befehl durch "y" zu ersetzen.

102
Mason

Du kannst den ... benutzen !!:gs/search/replace/ Notation, um zu tun, was Sie wollen. Dies nutzt das globale Suchen und Ersetzen (:gs):

vor

$ echo "harm warm swarm barm"
harm warm swarm barm

nach

$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born

Verweise

111
slm

Ich glaube nicht, dass es eine einfache Möglichkeit gibt, ^string1^string2 Etwas hinzuzufügen, damit bash jedes Vorkommen ersetzt. Wie slm betont, müssen Sie !!:gs/string1/string1 Schreiben.

Aber in zsh können Sie einfach :G Hinzufügen:

$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar

Sowohl in bash als auch in zsh können Sie fc -s Wie folgt verwenden:

$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar

Dies wird häufig in einen Alias ​​namens r umgewandelt, sodass Sie einfach Folgendes tun können:

$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar
50
Mikel

Ich glaube, dass die beste Option darin besteht, ": &" zu verwenden.

$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat
3
Arthur Accioly