BASH 履歴操作: 検索 置換

BASH 履歴操作: 検索 置換

BASH には非常に便利なパラメータ/変数拡張機能がありますが、履歴には表示されません。履歴と BASH 自体のマニュアル ページを確認しました。そこにはありませんでした... 見逃したのかもしれません。

例: 私は ssh を頻繁に使用しており、変数拡張を使用してこれを実行できます。

[email protected]

ユーザー名を削除するのではなく、ホストだけを抽出したいとします。

hostonly=${host##*@}

もし私が

echo $hostonly

次のような結果になります:

bar.org

私の質問: コマンドライン履歴でこれを行うことは可能ですか?

例えば。、

コマンド1:

ssh [email protected]

コマンド2:

ssh gary@!!:##*@

もちろん、これは機能しませんが、このタイプのパターン マッチングが利用可能かどうかを確認できる人はいますか?

ありがとう!

ブブノフ

答え1

人々がよく見逃す巧妙なトリックは、 コマンドですr(それ自体が コマンドの特殊なケースですfc)。

$ ssh [email protected]
(...)
$ r foo=baz

より一般的なケースは

$ fc -s foo=bar ssh

を使用すると、履歴から部分文字列でコマンドを選択し、指定された置換を実行して実行できます。 を省略すると、-sコマンドが に読み込まれ、$EDITORより複雑な変更が行われます。コマンド ライン編集ではほとんどの場合これが不要になりますが、コマンド ラインで行うのが難しい編集もあります。

履歴参照構文を使用してかなり複雑な操作を行うこともできます!が、歴史的な理由(基本的な履歴メカニズムは初期に確立されcsh、すべての拡張機能で互換性が維持されている)により、異なる構文が使用されます。ここ詳細については。

答え2

$ ssh [email protected]
...
$ ^foo^gary^
...

コマンドは、ユーザー名として「foo」の代わりに「gary」を使用して繰り返されます。以下は同じように動作します:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

関連情報