Bash: Son komuttaki bir kelimenin tüm tekrarlarını değiştir


14

Neredeyse yanlışlıkla, şöyle bir şey yapabileceğinizi anladım:

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

Ve bunun bar2.datayerine aynı komutu çalıştırır bar1.data. Şimdi, hedef kelimenin birden çok tekrarlaması olursa ne olur? Örneğin:

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

Yalnızca ilk datauzantının yerini alır . Her ikisinin de yerini almasını nasıl sağlayabilirim?

Yanıtlar:


22

Bence ^data^indexeşdeğer !!:s/data/index, bu yüzden sadece ilk kelimeyi değiştirecek. Tüm çizginin değiştirilmesini istiyorsanız, bence kullanmanız gerekecek!!:gs/data/index/


Bu değiştirme (: gs / data / index) bash özelliğidir veya örtük olarak başka bir program mı çağırıyor?
JohnTortugo


7

Sonuna ^: & ekleyerek yapabilirsiniz.
^: & iki olay yerine geçecek
^: g & bunların yerine geçecek

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

sidenote: 'komut satırı kungfu' kitabında
^: &


1
Aslında, ^:&ikame iki kez yapacak . Tüm tekrarlamaları yapmak için kullanın ^:g&( g"global" anlamına gelir).
G-Man, 'Monica'yı Yeniden Başlat' diyor

Tnx! Hiç ikiden fazla kez test etmedim. Komutu bir kitapta okuyun.
Not89
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.