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.
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.
Yanıtlar:
İ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
[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?
bash --version
= 4.2.45 (1) - yeniden yayın.
Ben bir şey eklemek için kolay bir yol var inanmıyorum ^string1^string2
yapmak için bash
her 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 bash
ve zsh
, ayrıca kullanabilirsiniz fc -s
bö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, r
böylece sadece yapabilirsiniz:
$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar
En iyi seçeneğin ": &" kullanmak olduğuna inanıyorum.
$ echo "dog cat dog"
$ ^dog^cat^:&
echo "cat cat cat"
cat cat cat
:&
Değiştirilecek daha fazla oluşum olduğu kadar çok eklemeniz gerekir .
command-history
etiketi kullanıyoruz gibi görünüyor . Eklendi. Ayrıca,bash
kabuktan bahsettiğinizi varsayıyorum ?