指定された文字列に一致するコマンドを履歴から削除するには?

指定された文字列に一致するコマンドを履歴から削除するには?

文字列に一致するすべてのコマンドを履歴から削除する必要があります。私は試した:

$ history | grep searchstring | cut -d" " -f2 | history -d
-bash: history: -d: option requires an argument

$ history | grep searchstring | cut -d" " -f2 | xargs history -d
xargs: history: No such file or directory

$ temparg() { while read i; do "$@" "$i"; done }
$ history | grep searchstring | cut -d" " -f2 | temparg history -d
(no error, but nothing is deleted)

これを行う正しい方法は何ですか?

ベストアンサー1

このhistoryコマンドは、履歴ファイル$HISTFILE(通常~/.historyはまたは~/.bash_history)でのみ機能します。ファイルから行を削除すると、はるかに簡単になります。これはいくつかの方法で行うことができます。grep1つの方法ですが、ファイルの読み込み中にファイルを上書きしないように注意する必要があります。

$ grep -v searchstring "$HISTFILE" > /tmp/history
$ mv /tmp/history "$HISTFILE"

別の方法は次のとおりですsed

$ sed -i '/searchstring/d' "$HISTFILE"

おすすめ記事