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?

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/


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.