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.