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?

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/


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.