Как удалить выбранные результаты из истории Bash?

Команда history показывает все результаты, но мы можем отфильтровать, чтобы получить конкретную команду, используя history | grep searchingCommand. Это действительно полезно.

Но проблема в том, что он показывает те команды, которые были введены с ошибкой опечатки или которые были неудачными. Тогда определение правильного действительно является болью. Я проверил эту ссылку: Выборочная история команд в терминале? , но это не было моим решением.

Так есть ли способ удалить те команды из истории, которые были неверны во время ввода или позже?

67
задан 13 April 2017 в 15:25

7 ответов

Я бы хотел добавить другой метод изменения (или удаления) записей истории, который я обнаружил довольно случайно, когда работал с bash:

Чтобы продемонстрировать это, начните с выполнения следующих трех команд в bash:

$ echo 1
1
$ echo 2
2
$ echo 3
3

Теперь вы можете снова выбрать эти команды, используя клавиши со стрелками или Ctrl + p и Ctrl + п .

Скажем, вы хотите изменить первые две команды. Перемещайтесь по истории, пока не появится echo 1, и измените ее на echo 1 - changed, но НЕ НАЖИМАЙТЕ ВВОД. Если вы теперь продвинетесь дальше в своей истории, эта линия останется в своем измененном состоянии, и вы сможете отойти от нее и вернуться к ней. Теперь перейдите к строке echo 2 и измените ее на echo 2 - changed, снова не нажимайте ввод. Чтобы сохранить изменения в этих строках, выберите любую команду в истории, кроме этих двух, и нажмите Ctrl + c .

Конечно, вместо изменения записи истории, вы также можете удалить ее, что приведет к пустой строке в этой записи. Чтобы удалить строку, отображаемую в данный момент в приглашении, нажмите Ctrl + e (которая переходит к концу строки), а затем нажмите Ctrl + < kbd> u (который удаляет текст от начала строки до курсора).

См. Также https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726 [ 116] для более подробного объяснения технического фона.

Простейший способ:

  1. ctrl + r для поиска команды, которую вы хотите удалить / изменить.
  2. end для выбора искомой команды для удаления / изменения
  3. Удалить или изменить выбранную команду (не нажимайте enter или < kbd> ctrl + c )
  4. стрелка вверх (или ctrl + p ) или стрелка вниз (или ctrl + n ), чтобы выбрать любую другую команду.
  5. ctrl + c Вот и все!

Примечание :

[ 1121] Это изменяет только текущие команды сеанса. Если мы хотим изменить старые команды и сохранить изменения, нам нужно выполнить следующую команду перед закрытием терминала:

history -w
0
ответ дан 13 April 2017 в 15:25

Используйте:

history -d OFFSET

, чтобы удалить запись истории со смещением OFFSET даже до того, как она была добавлена ​​в файл истории bash. Чтобы узнать правильный OFFSET, вам нужно всего лишь запустить команду history. Это число с начала строки, содержащей запись истории, которую вы хотите удалить.

И для сохранения изменений в истории используйте:

history -w

Подробнее см. В настоящего руководства .

0
ответ дан 13 April 2017 в 15:25

Отредактируйте файл ~/.bash_history и удалите один раз с опечатками

Например, введите следующую команду:

gedit ~/.bash_history

Отредактируйте что-нибудь, что вам нравится, и после этого сохраните файл и перезапустите терминал. Команда root:

sudo -i 
inser your password
gedit ~/.bash_history

, если вы хотите удалить все history -c, следует выполнить трюк


SYNTAX

history
history [n]
history -c
history -d offset
history [-anrw] [filename]
history -ps arg

KEY

-c Очистить список истории. Это может быть объединено с другими вариантами для полной замены списка истории.

-d смещение Удалить запись истории при смещении позиции. Смещение должно быть указано так, как оно отображается при отображении истории.

-a Добавить новые строки истории (строки истории, введенные с начала текущего сеанса Bash) в файл истории.

-n Добавить строки истории, еще не прочитанные из файла истории, в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса Bash.

-r Считать текущий файл истории и добавить его содержимое в список истории.

-w Запишите текущую историю в файл истории.

-p Выполнить подстановку истории по аргументам и отобразить результат на стандартном выводе, не сохраняя результаты в списке истории.

-s Аргументы добавляются в конец списка истории как одна запись.

source :

0
ответ дан 13 April 2017 в 15:25

Если Вы хотите сразу удалить его, формируют тот же терминал сначала, необходимо добавить следующее к ~/.bashrc файл.

PROMPT_COMMAND='history -a' 

и перезапустите свой терминал.

Можно добавить, что это где угодно в .bashrc файле.I добавило как ниже наряду с другим связанным с историей материалом.

enter image description here

Обычно во время сессии удара выполняемые команды не записаны в .bash_history, пока сессия не завершается следовательно PROMPT_COMMAND='history -a' вводит команду прямо здесь в .bash_history.

Теперь каждый раз, когда Вы делаете ошибку или ошибку в команде и хотите удалить ее, прямо здесь просто выполняют следующее

sed -i '$d' ~/.bash_history

и tada это было бы удалено.

Для создания этого более простым, можно исказить его к чему-то более более простому и использовать его такой как

alias rh ='sed -i '\''$d'\'' ~/.bash_history'

Так выполнение rh удалит последнюю выполняемую команду из истории.

Вышеупомянутое является временным искажением, которое только длится сессию. Для создания этого постоянным или персистентным добавляют

alias rh = 'sed -i '\''$d'\'' ~/.bash_history' 

к .bashrc

Примечание:

Не должно быть никакого пространства с обеих сторон =

Если Вы не Хотите Искажать затем, Вы могли бы также сделать следующее

Сделайте commad имя rh и поместите его в /bin каталог:

  • Откройтесь файл говорят rh и вставка после кода, сохраните и закройтесь:

    sed -i '$d' ~/.bash_history

  • Сделать rh исполняемый файл и место это в /bin каталог:

     chmod +x rh
     sudo cp rh /bin 
  • Теперь используйте rh команда для удаления недавней команды из истории.

16
ответ дан 13 April 2017 в 15:25

Если вы используете опцию «set -o vi» в bash (очень полезно для поиска с помощью клавиши Escape), вы можете выполнить поиск строки и удалить строку с помощью «dd» так же, как в VI».

0
ответ дан 13 April 2017 в 15:25

для удаления нескольких строк (например, с 1974 по 1990, проверьте с помощью команды history):

  for i in `seq 1974 1990` ; do history -d 1974 ; done

обратите внимание, что номер строки для удаления всегда одинаков, так как вы удаляете эту строку постоянно и перейти к следующему.

0
ответ дан 13 April 2017 в 15:25

У меня была ситуация, когда у меня были лишние записи в моей истории bash от Yubikey - может быть, 50 или около того, соответствующие 'ccccc .....'. В идеале мне нужен был способ удалить записи, соответствующие шаблону, что, я полагаю, вы могли бы сделать с помощью sed или чего-то еще, предполагая, что ваша история игнорирует пробелы.

В любом случае, я стал ленивым и закончил тем, что использовал vim, искал 'cccc' и использовал 'dd', перебирая каждый матч. Не заняло больше минуты.

0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

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