Bash: Ersetzen Sie alle Vorkommen eines Wortes im letzten Befehl

14

Fast aus Versehen habe ich herausgefunden, dass Sie so etwas tun können:

$ cp foo.data bar1.data
$ ^bar1^bar2

Und das läuft mit dem gleichen Befehl bar2.datastatt mit bar1.data. Wie wäre es nun, wenn das Zielwort mehrfach vorkommt? Beispielsweise:

$ cp foo.data bar.data
$ ^data^index

Es ersetzt nur die erste dataErweiterung. Wie kann ich beides ersetzen?

Belmin Fernandez
quelle

Antworten:

22

Ich denke ^data^indexist äquivalent zu !!:s/data/index, also wird es nur das erste Wort ersetzen. Wenn Sie die gesamte Zeile ersetzen möchten, müssen Sie sie verwenden!!:gs/data/index/

steabert
quelle
Diese Ersetzung (: gs / data / index) ist eine Bash-Funktion oder ruft sie implizit ein anderes Programm auf?
JohnTortugo
7

Sie können dies tun, indem Sie am Ende ^: & hinzufügen.
^: & ersetzt zwei Vorkommen
^: g & ersetzt alle

$ cp foo.data bar.data
$ ^ data ^ index ^: &
$ cp foo.index bar.index
$ cp foo.data bar.data joe.data doe.data
$ ^ data ^ index ^: g &
$ cp foo.index bar.index joe.index doe.index

sidenote: im buch 'command line kungfu'
steht, dass ^: & alles ersetzen wird

Note89
quelle
1
Tatsächlich ^:&wird die Auswechslung zweimal durchgeführt . Verwenden Sie ( steht für "global") , um alle Vorkommen zu erledigen . ^:g&g
G-Man sagt, dass Monica
TNX! Ich habe es nie mehr als zwei Mal getestet. Lesen Sie den Befehl in einem Buch.
Note89