履歴の最後のコマンドから2番目の引数にアクセスする方法は?


11

私はいくつかの正規表現を学び始めているので、このコマンドを繰り返し使用します:

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

パターンが変わる部分だけなので、長い式「/ usr / share / dict / american-english」を何度も書く必要があります。

誰かが、完全な式の代わりに不可解な文字の組み合わせを入力することにより、コマンド履歴からコマンドの引数を展開することが可能であると発言しました。これらの不可解な文字の組み合わせを教えてください。


これは2番目の引数ですか、最後の引数ですか?
mikeserv 2015

この場合、最後の議論はたまたま2番目ですが、私はこの区別を明確にしませんでした。
Abdul Al Hazred

その場合には、bashdashzshmksh、およびkshシェル(私が知っていることを、少なくとも)は、全て認識します$_最後のarg特殊パラメータを(一部はかかわらず、対話型モードのみで行います)。変数のように展開されます:grep somepattern filename; grep otherpattern "$_"。通常、その内容はの出力で確認できsetます。
mikeserv 2015

回答:


23

あなたは使用することができます<M-.>(または<Esc>.、つまり、メタドット(または<ESC>ドット)、メタは通常、Altキーである場合には、前のコマンドの最後の引数を思い出すためにあなたのMetaキーが他の何かのために使用されている場合)。したがって、最初に次のように入力します

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

そして、何か他のものをgrepしたい場合は、次のように入力します。

$ grep bar

スペースを入力した後Esc.(つまり、最初にエスケープキーを押し、次にピリオドキーを押します):

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

次のいずれかを使用することもできます。

$ grep bar !:2
$ grep bar !$

どこ!:2!$それぞれ「第二引数」と「最後の引数」を意味します。


これはemacs(デフォルト)のバインディングを使用して使用するのreadlineがあることはbashや貝殻のためである:とediting-mode viセットあなたはへの結合を追加する必要がある~/.inputrcためにyank-last-argあなたがバインドする必要があるとZshのためにinsert-last-word...
jasonwryan

@jasonwryan、それは、その後のいずれかで、あなたが望む最後のargだ場合(インタラクティブ) zshbashkshmksh、またはdashあなただけ使用することができますシェル$_。POSIXLY結合は、既にに、しかし、設定されているESC _時にset -o vi有効です。
mikeserv 2015

@mikeservマイクに感謝します。互換性のためにリバウンドしている必要があります...
jasonwryan '05 / 04/05

@jasonwryan-問題ありません-これはたまたま私が知っている唯一のシェルキーボードトリックです-私はこれらすべてのクイックタイプショートカットを覚えている/設定するのが面倒です。よろしければ、何と互換性がありますか?使い方が異なるプログラムはありますか?ああ、私は_letterエイリアスバインディングのESC @letterも覚えていますが、それはbsdで動作させる方法がまだわからないためですeditline
mikeserv 2015

@mikeserv私はBashとZsh(どちらもviモード)を使用していても、BashがEmacsモードのマシンで使用していても(同じようにバインディングを使用しています)、同じようにバインドします。
jasonwryan 2015

2

一般に(Bashを使用して) <Esc> N <Esc> .、前のコマンドのN番目の引数を現在のコマンドラインに呼び戻します(Nは0ベース)。

最後のコマンドの2番目の引数は、次のようになります。

<Esc> 1 <Esc> .

3番目の引数が必要な場合は、

<Esc> 2 <Esc> .

... 等々。

他の人が述べたように、前のコマンドの最後の引数が必要な場合は、そのための特定のショートカットがあります。

<Esc> .

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.