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.