Tarihin son komutundan ikinci argümana nasıl erişilir?


11

Bazı Regex öğrenmeye başlıyorum, bu nedenle bu komutu tekrar tekrar kullanıyorum:

grep pattern /usr/share/dict/american-english 

Desen değişiklik sadece bölüm, bu yüzden tekrar tekrar uzun ifade " / usr / share / dict / amerikan-ingilizce " yazmak zorunda .

Birisi, tam ifade yerine şifreli karakter kombinasyonları yazarak komut geçmişinden bir komut argümanını genişletmenin mümkün olduğunu belirtti. Bana bu şifreli karakter kombinasyonlarını söyler misiniz?


Bu ikinci argüman mı yoksa son argüman mı?
mikeserv

bu durumda son argüman ikinci olur, bu ayrımı netleştirmedim.
Abdul Al Hazred

Bu durumda, bash, dash, zsh, mksh, ve kshkabukları (Bilmem en azından o) tüm tanıyacağı $_son arg özel parametresini (bazı gerçi sadece etkileşimli modda bunu) . Bu sadece bir değişkene gibi genişler: grep somepattern filename; grep otherpattern "$_". Genellikle içeriğini çıktısında görebilirsiniz set.
mikeserv

Yanıtlar:


23

Önceki komutun son argümanını geri çağırmak için kullanabilirsiniz <M-.>(veya <Esc>.Meta anahtarınız başka bir şey için kullanılıyorsa), Meta-nokta (veya <esc> nokta), burada Meta genellikle Alt anahtarıdır. İlk olarak,

$ grep foo /usr/share/dict/american-english

Ve sonra başka bir şey için grep istiyorsan,

$ grep bar

Bir boşluk yazdıktan sonra Esc.(yani önce escape tuşuna ve sonra nokta tuşuna basıldıktan sonra):

$ grep bar /usr/share/dict/american-english

Aşağıdakilerden birini de kullanabilirsiniz:

$ grep bar !:2
$ grep bar !$

Nerede !:2ve !$ortalama "ikinci argüman" ve "son argüman".


Bu emacs (varsayılan) bağlamaları kullanarak readline kullanan bash ve kabuklar içindir: editing-mode viset ile Zsh ~/.inputrciçin bir bağlayıcı eklemeniz gerekir yank-last-argve Zsh için bağlamanız gerekir insert-last-word...
jasonwryan

o zaman herhangi birinde istediğiniz son Argo, eğer @jasonwryan, (etkileşimli) zsh , bash, ksh, mksh, veya dashkabukları sadece kullanabilirsiniz $_. OLASI, bağlama zaten ESC _ne zaman geçerli olacak set -o vişekilde ayarlanmış .
mikeserv

@mikeserv Teşekkürler Mike, uyumluluk için ribaund olmalı ...
jasonwryan

@jasonwryan - sorun değil - bu sadece bildiğim tek kabuk klavye hilesi olur - Tüm bu hızlı tip kısayollarını hatırlamak / yapılandırmak için emiyorum. Eğer sakıncası yoksa, ne ile uyumluluk? Kullandığınız programı farklı yapan bir program var mı? Oh, ayrıca ESC @letter'ı _lettertakma ad bağlama için hatırlayabilirim - ancak hala ws / bsd ile nasıl çalışacağını anlayamadığım için editline.
mikeserv

mikeserv Bash veya Zsh (her ikisi de vi modunda) ya da Emacs modunda Bash olan bir makinede (gerçekten çekiçlediğim bağlardan biri) kullanmam fark etmez.
jasonwryan

2

Genel olarak (Bash ile) bir <Esc> N <Esc> .önceki komuttan N'inci argümanı geçerli komut satırına çağırır (burada N 0 tabanlıdır).

Son komuttan ikinci argüman için bu şöyle olur:

<Esc> 1 <Esc> .

Üçüncü argümanı istiyorsanız, o zaman

<Esc> 2 <Esc> .

... ve bunun gibi.

Diğerlerinin de belirttiği gibi, önceki komuttan son argümanı istiyorsanız , bunun için belirli bir kısayol vardır:

<Esc> .

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.