Bagaimana cara mengakses argumen kedua dari perintah terakhir dalam sejarah?

11

Saya mulai mempelajari beberapa Regex, oleh karena itu saya menggunakan perintah ini berulang kali:

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

Hanya bagian dengan perubahan pola, jadi saya harus menulis ungkapan panjang " / usr / share / dict / american-english " lagi dan lagi.

Seseorang membuat pernyataan bahwa adalah mungkin untuk memperluas argumen perintah dari sejarah perintah dengan mengetikkan kombinasi karakter samar bukannya ekspresi penuh. Bisakah Anda memberi tahu saya kombinasi karakter samar itu?

Abdul Al Hazred
sumber
Apakah ini tentang argumen kedua atau argumen terakhir?
mikeserv
dalam hal ini argumen terakhir adalah yang kedua, saya tidak menjelaskan perbedaan ini.
Abdul Al Hazred
Dalam hal ini, bash, dash, zsh, mksh, dan kshkerang (setidaknya, yang saya tahu tentang) akan semua mengenali $_arg terakhir parameter khusus (beberapa melakukannya hanya dalam modus interaktif, meskipun) . Itu hanya memperluas seperti variabel: grep somepattern filename; grep otherpattern "$_". Anda biasanya dapat melihat isinya di keluaran set.
mikeserv

Jawaban:

23

Anda dapat menggunakan <M-.>(atau <Esc>.jika kunci Meta Anda digunakan untuk sesuatu yang lain), yaitu, Meta-dot (atau <esc> dot), di mana Meta biasanya merupakan kunci Alt, untuk mengingat argumen terakhir dari perintah sebelumnya. Jadi, pertama Anda mengetik

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

Dan kemudian jika Anda ingin mencari sesuatu yang lain, Anda akan mengetik

$ grep bar

Setelah mengetik spasi dan kemudian Esc.(yaitu, pertama-tama menekan tombol escape, dan kemudian tombol periode):

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

Anda juga dapat menggunakan salah satu dari berikut ini:

$ grep bar !:2
$ grep bar !$

Dimana !:2dan masing-masing !$berarti "argumen kedua" dan "argumen terakhir".

Gagang pintu
sumber
Ini untuk bash dan shell yang menggunakan readline menggunakan binding emacs (default): dengan editing-mode viset Anda perlu menambahkan ikatan ~/.inputrcuntuk yank-last-argdan untuk Zsh Anda harus mengikat insert-last-word...
jasonwryan
@jasonwryan, apakah itu arg terakhir yang Anda inginkan, maka dalam salah (interaktif) zsh , bash, ksh, mksh, atau dashkerang Anda dapat hanya menggunakan $_. POSIXLY yang mengikat sudah diatur, namun, ESC _kapan set -o viberlaku.
mikeserv
@ mikeserv Terima kasih Mike, saya harus mengembalikannya untuk
kesesuaian
@jasonwryan - tidak masalah - ini hanya terjadi pada satu-satunya trik keyboard shell yang saya tahu - Saya payah mengingat / mengkonfigurasi semua pintasan jenis cepat itu. Jika Anda tidak keberatan, kompatibilitas dengan apa? Apakah ada beberapa program yang Anda gunakan yang melakukannya secara berbeda? Oh, saya juga bisa mengingat ESC @letter untuk _letterikatan alias - tetapi hanya karena saya masih tidak tahu cara membuatnya bekerja dengan bsd editline.
mikeserv
@ mikeserv Saya mengikatnya sedemikian rupa sehingga tetap sama tidak peduli apakah saya menggunakan Bash atau Zsh (keduanya dalam mode vi) atau pada mesin dengan Bash dalam mode Emacs (itu adalah salah satu binding yang benar-benar saya palu).
jasonwryan
2

Secara umum (dengan Bash) <Esc> N <Esc> .akan memanggil kembali argumen Nth dari perintah sebelumnya ke baris perintah saat ini (di mana N adalah berbasis 0).

Untuk argumen kedua dari perintah terakhir, itu akan menjadi:

<Esc> 1 <Esc> .

Jika Anda menginginkan argumen ketiga, maka

<Esc> 2 <Esc> .

... dan seterusnya.

Seperti yang disebutkan orang lain, jika Anda ingin argumen terakhir dari perintah sebelumnya, ada jalan pintas khusus untuk itu hanya:

<Esc> .

abonet
sumber