Bash: Ganti semua kemunculan kata dalam perintah terakhir

14

Hampir tidak sengaja, saya tahu Anda bisa melakukan sesuatu seperti:

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

Dan itu menjalankan perintah yang sama dengan bar2.databukannya bar1.data. Sekarang, bagaimana kalau saya memiliki beberapa kemunculan kata target? Sebagai contoh:

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

Itu hanya menggantikan dataekstensi pertama . Bagaimana saya mendapatkannya untuk menggantikan keduanya?

Belmin Fernandez
sumber

Jawaban:

22

Saya pikir ^data^indexsetara dengan !!:s/data/index, jadi itu hanya akan menggantikan kata pertama. Jika Anda ingin seluruh baris diganti, saya pikir Anda harus menggunakannya!!:gs/data/index/

Steabert
sumber
Penggantian ini (: gs / data / index) adalah fitur bash atau apakah secara implisit memanggil program lain?
JohnTortugo
7

Anda dapat melakukannya dengan menambahkan ^: & sampai akhir.
^: & akan mengganti dua kejadian
^: g & akan mengganti semua

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

sidenote: di buku 'command line kungfu'
tertulis bahwa ^: & akan menggantikan semua

Note89
sumber
1
Sebenarnya, ^:&akan melakukan penggantian dua kali . Untuk melakukan semua kejadian, gunakan ^:g&( gsingkatan dari "global").
G-Man Mengatakan 'Reinstate Monica'
Tnx! Saya tidak pernah mengujinya lebih dari dua kali. Baca perintah dalam sebuah buku.
Note89