Ctrlbash履歴を検索するために+を使用するRときに隣接していない2つの単語を一致させる方法はありますか?たとえば、を含むhttpd
が隣接していないawk
最後のコマンドを探したいとします。 bashの履歴をgrepingして両方を一致させるか、Ctrl+を押して目的のコマンドが見つかるまでキーワードに一致する項目を循環するよりもR優れたオプションはありますか?
答え1
答え2
これを行う組み込みの方法はわかりませんが、grepを実行して履歴ファイルを編集して結果を最後に表示する小さな関数を作成できます。次に、簡単に一致するものを選択して新しい歴史に追加します。進み続けます。 (これにより、履歴のコマンド順序が変わります。)
こんな機能ですね。私はあなたが現れる順序に関係なく2つ以上の単語を探したいとします。許容される最大一致数は10個です。また、最初のgrepが大きな文字列を返さないか、bash文字列の代わりに一時ファイルを使用する必要があるとします。
hist(){
local maxmatches=10 word=$1 matches new nummatches
shift
history -w # write out history to HISTFILE
matches=$(grep -e "$word" $HISTFILE)
for word
do new=$(echo "$matches" | grep -e "$word") || return # if str too big
matches=$new
done
nummatches=$(echo "$matches" | wc -l)
echo "$nummatches matches"
if [ $nummatches -gt 0 -a $nummatches -le $maxmatches ]
then echo "$matches" >>$HISTFILE # add matches to end of file
history -c # clear history
history -r # read history from file
history $nummatches # show last few lines
else echo "zero or too many matches. (max $maxmatches)"
fi
}
単語に対して正規表現パターンマッチングを実行したくない場合は、grep の代わりに fgrep を使用します。特定のシーケンスのみが必要な場合は、「httpd.*awk」などの単一の単語を使用してください。この方法で1つの単語しか使用されていない場合は、forループを削除することもできます。