Tôi không biết cách tích hợp nào để thực hiện việc này, nhưng bạn có thể viết một hàm nhỏ để thực hiện grep và chỉnh sửa tệp lịch sử của mình để kết quả xuất hiện ở cuối và sau đó bạn có thể dễ dàng chọn một trong các kết quả khớp chỉ bằng cách di chuyển lên qua lịch sử mới. (Điều này không thay đổi thứ tự các lệnh trong lịch sử của bạn).
Đây là một chức năng như vậy. Tôi giả sử bạn muốn tìm 2 (hoặc nhiều hơn) bất kể chúng xuất hiện theo thứ tự nào. Bạn có thể đặt số lượng tối đa các trận đấu bạn muốn chấp nhận; đây là 10. Tôi cũng giả sử rằng grep ban đầu không trả về một chuỗi hài hước, hoặc bạn sẽ cần sử dụng các tệp tạm thời thay vì các chuỗi 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
}
Nếu bạn không muốn kết hợp mô hình regrec cho các từ của mình, hãy sử dụng fgrep thay vì grep. Nếu bạn chỉ muốn thứ tự nhất định, hãy sử dụng một từ như "httpd. * Awk". Bạn cũng có thể xóa vòng lặp for nếu chỉ sử dụng một từ theo cách này.