正規表現またはgrepに一致する履歴のコマンドを実行します。

正規表現またはgrepに一致する履歴のコマンドを実行します。

特定の正規表現に一致するコマンドを履歴から実行できるかどうか疑問に思います。私はあなたが次のことをすることができることを知っています

fc 232 248

それはあなたのものに入ったhistory次のリビジョン232-248に連続して進みます。

しかし、途中で私がしたくないコマンドがあればそれを指定する方法はありますか?今私のものを見つけてhistory出力します。grep

history | grep checkout

これにより、支払いで行ったすべての最終作業が検索されます。

232 git checkout master files/file1.txt
234 git checkout master files/file2.txt
248 git checkout master files/file3.txt

いくつかの数字をフィルタリングするので、パイプで抽出された数字だけを実行したいと思います。その間のすべてではなく

答え1

特定の文字列(例"checkout":)または正規表現(例:)を含むbashですべてのコマンドを実行するには、次の手順を実行します。"checkout.+file\d"history

grep -E "string_exp" $HOME/.bash_history | while read line; do eval "$line"; done

関数として保存できます~/.bashrc

#!/bin/bash

all_prev () {
   grep -E "$1" $HOME/.bash_history | while read line; do eval "$line"; done
}

その後、次のように入力します。

all_prev checkout

編集する:

  • .bash_history時間が経つにつれてファイルが蓄積されたために重複コマンドを多数実行したくない場合は、まだ設定されていない場合は、export HISTCONTROL=ignoredupsこの項目が設定されていることを確認してください。~/.bashrc

  • 毎回クエリを含む検索を再実行したくない場合は、all_prev正規表現を使用^して$行の先頭と末尾に文字を指定してください。


ただし、次のようなより強力な履歴フィルタリング機能を備えたシェルも確認する必要があります。zsh(でもfish)。

関連情報