ZSH / BASH: удалить определенные строки из истории

658
Giel Berkers

Моя история «загрязнена» некоторыми конкретными чертами, которые имеют опечатки и тому подобное. Например: мне часто приходится подключаться к определенному серверу следующим образом:

ssh foo-bar@domain.tld > Connects succesfully 

Но я также иногда делаю опечатку:

ssh bar-foo@domain.tld > Permission denied 

Поскольку я полагаюсь на историю, эта опечатка дублируется несколько раз:

cat .zsh_history | grep bar-foo@domain.tld > : 1510301683:0;ssh bar-foo@domain.tld > : 1511166682:0;ssh bar-foo@domain.tld > : 1511193552:0;ssh bar-foo@domain.tld > : 1512730972:0;ssh bar-foo@domain.tld > : 1516368993:0;ssh bar-foo@domain.tld > : 1516802690:0;ssh bar-foo@domain.tld > : 1519633368:0;ssh bar-foo@domain.tld 

Есть ли простой способ очистить мою историю по результатам команды grep? (или, может быть, есть другое, более умное решение?)

Обновить:

Обратите внимание: я не ищу способ удалить строку xиз истории; Я знаю, что есть много статей, которые освещают это. Я просто ищу (простой?) Способ удалить все строки, которые содержат строки y.

0
Возможное дублирование [Удалить определенную строку из файла истории Bash] (https://superuser.com/questions/384366/remove-a-termin-line-from-bash-history-file) agc 5 лет назад 0
Не уверен, что это дубликат. Я просто хочу очистить свою историю, удалив все строки, которые содержат строку `x`. Связанный вопрос заключается в том, как удалить по номерам строк. Giel Berkers 5 лет назад 0
Возможно, вас заинтересует опция zsh ** HIST_IGNORE_ALL_DUPS **, чтобы вообще не хранить дубликаты в вашей истории: если новая командная строка, добавляемая в список истории, дублирует более старую, более старая команда удаляется из списка (даже если это не предыдущее событие). mpy 5 лет назад 0
@GielBerkers, [Удалить определенную строку из файла истории Bash] (https://superuser.com/questions/384366/remove-a-termin-line-from-bash-history-file) кажется довольно общим, с ответами, использующими различные методы. Простейшее исправление `grep` находится в [комментарии * mivk] (https://superuser.com/questions/384366/remove-a-termin-line-from-bash-history-file#comment878325_529193), который печатает необходимые команды (без их фактического запуска): `history | grep XYZ | grep -v grep | так | awk '' ` agc 5 лет назад 0

1 ответ на вопрос

0
mafiaman42

Вы можете использовать эту команду, чтобы правильно удалить все строки со строкой в ​​истории:

sed -i '/string/d' .bash_history 

Похожие вопросы