Как получить диапазон истории оболочки Bash

9

Как я могу получить / отфильтровать записи истории в определенном диапазоне?

У меня есть большой файл истории и я часто использую

history | grep somecommand

Теперь у меня плохая память, и я также хочу посмотреть, что еще я делал, когда вводил команду.

А пока я делаю это: получи совпадение, скажи 4992 somecommand, тогда я сделаю

history | grep 49[0-9][0-9]

обычно это достаточно хорошо, но я бы предпочел сделать это более точно, то есть увидеть команды с 4972 по 5012, то есть 20 команд до и 20 после.

Мне интересно, есть ли более простой способ? Я подозреваю, что заказной сценарий в порядке, но, возможно, кто-то еще делал что-то подобное раньше.

Aniti
источник
Для манипулирования историей есть 2 встроенных модуля: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK сообщает, что верните Монику

Ответы:

13

Вы можете grepраспечатать несколько строк, окружающих совпадение, например, 3 до и 5 после:

history | grep -B 3 -A 5 somecommand

grep -C 4эквивалентно grep -A 4 -B 4.

Но часто вы не будете точно знать, сколько строк вы хотите заранее. Поэтому используйте меньше и ищите внутри него. Вы даже можете запустить поиск из командной строки:

history | less +/somecommand
Жиль "ТАК - перестань быть злым"
источник
1
очень крутой трюк с less! Не знал, что вы могли бы сделать это
Уоррен
Очень хорошо, действительно ... Я могу видеть "вокруг" команду, которую ищу, даже когда я не особо ее ищу, но я помню, как использовал ее, когда использовал другую соответствующую команду! Хорошие вещи TNX.
Халил Гарбауи
8

Попробуйте fc:

fc -l 4972 5012

... это встроенная команда bash. (так что не пытайтесь в tcsh:>)

Рондо
источник
4

пытаться history | grep -C20 '^4992'

Случайный кодер
источник