Мне нужно удалить все команды в моей истории, соответствующие строке. Я пробовал:
$ 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)
Как правильно это сделать?
bash
text-processing
command-history
xargs
linuxfix
источник
источник
history -d X
. Я столкнулся с этим вопросом, потому что я только что сделалhistory | grep search_str | sort -nr | awk '{print $1}' | while read i; do history -d $i; done
. Нет ошибки, но ничего не удалено. Кто-нибудь может объяснить почему?Ответы:
Команда
history
работает только с вашим файлом истории$HISTFILE
(обычно~/.history
или~/.bash_history
). Будет гораздо проще, если вы просто удалите строки из этого файла, что можно сделать разными способами.grep
Это один из способов, но вы должны быть осторожны, чтобы не перезаписать файл во время его чтения:Другой способ с
sed
:источник
$HISTFILE
может содержать пробелы, вероятно, стоит цитировать его.Ответ Михаэля Мрозека сработает, если вы не хотите удалять команды из текущего сеанса. Если вы это сделаете, вы должны записать в файл истории, прежде чем делать операции в своем посте, выполнив
history -a
.Кроме того, после того, как вы удалили нужные записи из файла истории, вы можете перезагрузить их, выполнив
history -c
, затемhistory -r
.источник
Основываясь на ответах Майкла и Криса , я придумал следующее. Добавьте его в свой
~/.bashrc
файл , а затем загрузить его либо. ~/.bashrc
илиsource ~/.bashrc
.источник
Для тех, кто ищет однострочник:
Так что, если вы хотели, например. удалите несколько строк с паролем, просто замените «SEARCH_STRING_GOES_HERE» на пароль. Это будет искать всю историю поиска для этой строки поиска и удалить ее.
2 вещи, которые нужно знать
источник
Это сработало для меня. history -c && history -a неправильно перезагрузила файл истории для меня. Поэтому вместо этого я просто выхожу из сеанса сразу после перезаписи файла истории, чтобы тот, который находится в памяти, не перезаписывал его.
источник