Bash: Zamień wszystkie wystąpienia słowa w ostatnim poleceniu


14

Niemal przez pomyłkę doszedłem do wniosku, że możesz zrobić coś takiego:

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

I to uruchamia to samo polecenie z bar2.datazamiast bar1.data. A co powiesz na to, czy mam wiele wystąpień słowa docelowego? Na przykład:

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

Zastępuje tylko pierwsze datarozszerzenie. Jak mogę go zastąpić?

Odpowiedzi:


22

Myślę, że ^data^indexjest równoważne !!:s/data/index, więc zastąpi tylko pierwsze słowo. Jeśli chcesz zastąpić całą linię, myślę, że będziesz musiał użyć!!:gs/data/index/


Ta zamiana (: gs / data / index) jest funkcją bashową, czy może domyślnie wywołuje inny program?
JohnTortugo,


7

Możesz to zrobić, dodając ^: & na końcu.
^: i zastąpi dwa wystąpienia
^: g & zastąpi wszystkie

$ 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: w książce „linia poleceń kungfu”
jest napisane, że ^: & zastąpi wszystko


1
Właściwie ^:&dokona zamiany dwa razy . Aby zrobić wszystkie wystąpienia, użyj ^:g&( goznacza „globalny”).
G-Man,

Tnx! Nigdy nie testowałem tego więcej niż dwa razy. Przeczytaj polecenie w książce.
Note89
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.