Как мне выполнить поиск в истории командной строки команд, которые я использовал ранее?

Помимо просмотра истории, есть ли способ отфильтровать мою историю?

Скажем, я хочу выполнить поиск команды, которая начиналась с "ssh"?

Нажмите Ctrl+R и введите ssh. Ctrl+R начнется поиск от самой последней команды к старой (обратный поиск). Если у вас есть более одной команды, которая начинается с ssh, Нажмите Ctrl+R снова и снова, пока не найдете совпадение.

Как только вы найдете совпадение, вы можете нажать Enter для выполнения команды или наведения курсора влево / вправо достаточно просто выделить текст команды.

По умолчанию нет обратного параметра для Ctrl+R чтобы изменить направление поиска, но здесь вы найдете несколько предложений по этому поводу.

Если вы просто хотите выполнить поиск в своей истории, вы можете просто использовать history | grep ssh, заменяя ssh на все, что вы хотите найти.

Я делаю небольшую вариацию вышеизложенного, которая хорошо работает для меня (если вы имеете в виду свою историю bash

В моей домашней папке я создаю файл с именем

.inputrc

Внутри идет это

"\e[5~": history-search-backward"\e[6~": history-search-forward

Примечание: вышеуказанное, похоже, больше не работает в 14.04, так что это делает то же самое -

"\e[A":history-search-backward"\e[B":history-search-forward

Затем, набрав любую часть предыдущей команды, которую я пожелаю, и используя кнопки page up / page dn, выполняет поиск в истории, всегда начиная со страницы вверх

Прессование Ctrl+R запустится режим "обратного поиска", ввод "ssh" приведет к поиску в вашей истории команд, содержащих "ssh".

Вот еще один метод, использующий классические команды (скорее всего, он будет работать в разных дистрибутивах). История команд сохраняется в файле .bash_history в вашем домашнем каталоге, так что вы можете сделать это:

grep "ssh" ~/.bash_history

Не забывай о -i отметьте, если вам нужен поиск без учета регистра.

Я нашел следующую функцию где-то в Интернете и использовал ее с большим эффектом. Положи это в свой ~/.bashrc:

hgrep () {     history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"}

Теперь перезагрузите свою оболочку: exec bash. Теперь у вас есть новая команда, которую вы можете использовать следующим образом:

hgrep ssh

Он покажет вам список соответствующих команд из вашей истории. Чтобы выполнить команду, введите ! за которым следует номер команды. Вот пример:

~:$ hgrep scp  207  tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .  421  tn scp scott-laptop __HOST__:Scott\ Severance.asc .  422  tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .  468  tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds  469  tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds~:$ !207

Мне такой подход нравится больше, чем Ctrl+R потому что это позволяет выполнять гораздо более гибкий поиск, и я могу видеть сразу несколько результатов.

Положи это в свой ~/.bashrc :

псевдоним hgrep='история | grep --color=auto '

пример:

История хороша, но ограничена - я предпочитаю настраивать свою среду bash так, чтобы я регистрировался все из команд, которые я когда-либо запускал, в дополнение к каталогу, в котором они были запущены. Затем я запускаю команду, чтобы перечислить все команды, которые я выполнил в текущем каталоге, которые я могу передать в grep и т.д. - Это называется "dish", см.:

https://github.com/wolfwoolford/dish

Если вы хотите перейти к сути, просто добавьте это в свой файл .bashrc (https://github.com/wolfwoolford/dish/blob/master/dishrc)

Есть также действительно полезная команда, которую вы получаете бесплатно под названием 'dishg' - или dish global - которая выводит на печать каждую когда-либо выполняемую команду, независимо от каталога. Очевидно, что это полезно только при использовании с grep, tail и т.д...

Я использую его уже много лет, и это буквально первое, что я устанавливаю всякий раз, когда устанавливаю новую коробку. Он записывает команды, которые вы выполняете, в текстовые файлы в скрытом каталоге (~ /.dish) .. У меня никогда не было проблем с дисковым пространством...

Хотел написать это в качестве комментария к @ssmy но не смог заставить форматирование в комментарии сотрудничать.

После просмотра истории с history | grep ssh затем вы можете выполнить желаемую команду, введя ее номер, перед которым стоит восклицательный знак, например !42.

Пример:

$ история | grep ssh 5 ssh me@someserver.net 13 ssh me@someotherserver.net 42 ssh me@thisone.com $ !42

Мне нравится просматривать свою историю, а не Ctrl+R обратный поиск. Это потому, что вы можете видеть только одну строку с Ctrl+R. С помощью grep вы получаете более полное представление о вашем последнем взаимодействии с командой и т.д.

У меня есть следующее в моем .bashrc . Это позволяет вам искать историю команд, набрав hiss KEYWORD Называйте это как хотите. Мне нравится шипеть ^^. Не забудьте перезагрузить свой .bashrc файл с source ~/.bashrc

hiss () { history | grep "$@"; }