Ich kenne keine eingebaute Möglichkeit, dies zu tun, aber Sie können eine kleine Funktion schreiben, um das Grep durchzuführen und Ihre Verlaufsdatei so zu bearbeiten, dass die Ergebnisse am Ende angezeigt werden, und Sie können dann einfach eine der Übereinstimmungen auswählen durch die neue Geschichte aufsteigen. (Dies ändert die Reihenfolge der Befehle in Ihrem Verlauf).
Hier ist eine solche Funktion. Ich gehe davon aus, dass Sie die 2 (oder mehr) Wörter finden möchten, unabhängig davon, in welcher Reihenfolge sie erscheinen. Sie können die maximale Anzahl von Übereinstimmungen festlegen, die Sie akzeptieren möchten. hier ist es 10. Ich gehe auch davon aus, dass das anfängliche grep keine humorvolle Zeichenfolge zurückgibt, oder Sie müssen temporäre Dateien anstelle von Bash-Zeichenfolgen verwenden.
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
}
Wenn Sie keine Regexp-Musterübereinstimmung für Ihre Wörter wünschen, verwenden Sie fgrep anstelle von grep. Wenn Sie nur die angegebene Reihenfolge möchten, verwenden Sie ein einzelnes Wort wie "httpd. * Awk". Sie können die for-Schleife auch entfernen, wenn Sie nur ein Wort auf diese Weise verwenden.