Eu não conheço nenhuma maneira interna de fazer isso, mas você pode escrever uma pequena função para fazer o grep e editar seu arquivo de histórico para que os resultados apareçam no final, e então você pode facilmente escolher um dos arquivos. corresponde apenas avançando pela nova história. (Isso altera a ordem dos comandos no seu histórico).
Aqui está essa função. Eu estou supondo que você quer encontrar as 2 (ou mais) palavras, não importa em qual ordem elas aparecem. Você pode definir o número máximo de correspondências que deseja aceitar; aqui está 10. Eu também estou assumindo que o grep inicial não retorna uma string humungous, ou você precisará usar arquivos temporários ao invés de strings 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
}
Se você não quiser a correspondência de padrões regulares para suas palavras, use fgrep em vez de grep. Se você quer apenas a ordem dada, use uma única palavra como "httpd. * Awk".
Você também pode remover o loop for se usar apenas uma palavra dessa maneira.