^ x ^ y son komuttaki tüm örnekler için unix numarası?


97

En sevdiğim Unix püf noktalarından biri de ^x^y, son komutu alacak ve ilk "x" örneğini "y" ile değiştirecek. Ancak, benzer bir hilenin son komuttaki "x" tüm örneklerini "y" ile değiştirmeye çalışıp çalışmadığını merak ediyorum.


2
Özelliğe geçmiş genişletme adı verilir. Bunun için command-historyetiketi kullanıyoruz gibi görünüyor . Eklendi. Ayrıca, bashkabuktan bahsettiğinizi varsayıyorum ?
Mikel

Yanıtlar:


107

İstediğinizi !!:gs/search/replace/yapmak için gösterimi kullanabilirsiniz . Bu global arama ve değiştirme ( :gs) yöntemini kullanır :

önce

$ echo "harm warm swarm barm"
harm warm swarm barm

sonra

$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born

Referanslar


1
@slm bu komut sadece benim için ilk örneği değiştiriyor. [subhrcho@slc04lyo pcbpel]$ echo "hat that bat" hat that bat [subhrcho@slc04lyo pcbpel]$ !!:gs/at/xx/ echo "hxx that bat" hxx that bat. Neyi kaçırıyorum?
Geek

@Geek - senin dağıtımın nedir? Bash kullanıyor musunuz? Sürüm? bash --version= 4.2.45 (1) - yeniden yayın.
slm

@slm GNU bash, sürüm 3.2.25 (1) - yayınlanma (x86_64-redhat-linux-gnu) Telif Hakkı (C) 2005 Özgür Yazılım Vakfı, Inc.
Geek

@Geek - Çok eski bir sürüm, bu özelliği sunmuyor.
slm

45

Ben bir şey eklemek için kolay bir yol var inanmıyorum ^string1^string2yapmak için bashher geçtiği değiştirin. Slm'in işaret ettiği gibi, yazmak zorundasınız !!:gs/string1/string1.

Ancak zsh, sadece ekleyebilirsiniz :G:

$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar

İkisinde de bashve zsh, ayrıca kullanabilirsiniz fc -sböyle:

$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar

Bu genellikle adlandırılan bir takma adla yapılır, rböylece sadece yapabilirsiniz:

$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar

Vay canına, bu da gerçekten güzel
Mason

2

En iyi seçeneğin ": &" kullanmak olduğuna inanıyorum.

$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat

3
Bu yerine 2 değildir oluşumları, bütün (sadece 2 kullanımında olduğu gibi, ancak genel durumda, bu örnekte de tüm) 'ü. :&Değiştirilecek daha fazla oluşum olduğu kadar çok eklemeniz gerekir .
Stéphane Chazelas
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.