質問
特定の文字列を含む行数を取得するために、次のコマンドを入力したとします。
me@machine $ command-producing-multi-line-output | grep -i "needle" | wc -l
今、どうすれば"needle"
この単語を別の単語にすばやく変更できますか?
現在の非効率的なソリューション
今私は:
Up
キーボードを押して最後のコマンドをロードします。- に達するまで
Left
またはCtrl
+を押します。Left
"needle"
- 単語を削除するには、
Backspace
またはCtrl
+を押します。w
- 新しい単語を入力するか貼り付けます。
- 勝つ
Enter
。
これは非常に非効率的なようです。
非効率的なソリューションの試み
たとえば、歴史的な近道を調べてみましたが、!!:sg/needle/new-needle
ここにはいくつかの問題があります。
- コマンドライン
Up
に戻るキーを押すことはできません。!!:sg/needle/new-needle
これにより、拡張内容が表示されます(元の質問に直接戻る)。 - 別の新しい針でこれを繰り返すには、交換
needle
とnew-needle
(つまり!!:sg/new-needle-from-before/yet-another-new-needle
)の両方が必要です。 - ピンの長さに関係なく時間/キー入力を節約するには、または同じものを使用するのではなく、内容全体を入力する必要があります
needle
。!:4
$4
!!:sg/!:4/new-needle
!!:sg/$4/new-needle
似たようなものを見つけました!:^-3 "new-needle" !:5-$
が、問題もありました。
- 履歴が拡張されるため、すばやく再利用できません。
- 拡張されていなくても、コマンドチェーンの途中で単語を置き換える必要がある元の問題はまだ残っています。
私は私がやりたいことを達成するための非常に迅速な方法があると信じており、いくつかのLinuxの専門家はそれを知っています。これについてのコメントや提案があれば、非常に感謝します。
編集する:
背景
いくつかの背景知識を提供するために、私はコマンドラインでOpenStackを使用して作業し、パイプラインコマンドの長いコマンドチェーンのさまざまな場所でパラメータを置き換える必要があることがよくあります。
OpenStack 環境の構成方法は、複数のエンジニアがstack
必要な数のサーバーでユーザーを共有し、複数の環境にわたって複数のクラスターがあることです。したがって、.bashrc
またはファイルで宣言された関数は.profile
実際には不可能です。
すばやく使用でき、設定がまったく必要ない、または最小限の設定しか必要としないポータブルデバイスが必要です。それ以外の場合は、完全にシェル外のソリューション(AutoHotKey / Keyboard Maestro / AutoKeyなどのクリップボードの交換)を使用する必要があります。
ベストアンサー1
それは正確に何歴史的拡張使用:
$ command-producing-multi-line-output | grep -i "needle" | wc -l
...
$ ^needle^nipple
command-producing-multi-line-output | grep -i "nipple" | wc -l
...