จากคำตอบของไมเคิลและคริสฉันก็ทำตามสิ่งต่อไปนี้ เพิ่มไปยังคุณ~/.bashrc
ไฟล์แล้วโหลดด้วยหรือ. ~/.bashrc
source ~/.bashrc
:<<COMMENT
Deletes all lines from the history that match a search string, with a
prompt. The history file is then reloaded into memory.
Examples
hxf "rm -rf"
hxf ^source
See:
- https://unix.stackexchange.com/questions/57924/how-to-delete-commands-in-history-matching-a-given-string
COMMENT
#The unalias prevents odd errors when calling". ~/.bashrc" (May result in
#"not found" errors. That's okay).
unalias hxf
hxf() {
read -r -p "About to delete all items from history that match \"$1\". Are you sure? [y/N] " response
response=${response,,} # tolower
if [[ $response =~ ^(yes|y)$ ]]
then
#Delete all matched items from the file, and duplicate it to a temp
#location.
echo -e "grep -v \"$1\" \"$HISTFILE\" > /tmp/history"
grep -v "$1" "$HISTFILE" > /tmp/history
#Clear all items in the current sessions history (in memory). This
#empties out $HISTFILE.
echo "history -c"
history -c
#Overwrite the actual history file with the temp one.
echo -e "mv /tmp/history \"$HISTFILE\""
mv /tmp/history "$HISTFILE"
#Now reload it.
echo -e "history -r \"$HISTFILE\""
history -r "$HISTFILE" #Alternative: exec bash
else
echo "Cancelled."
fi
}
history -d X
ในขณะที่มีกำลังทำงานคำตอบดังต่อไปนี้ผมก็ยังสงสัยว่าทำไมมันไม่ได้ทำงานกับ ฉันเจอคำถามนี้เพราะเพิ่งทำhistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
ไป ไม่มีข้อผิดพลาด แต่ไม่มีอะไรถูกลบ ทุกคนสามารถอธิบายได้ว่าทำไม