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


9

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

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

history | grep somecommand

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

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

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

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

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


Для манипулирования историей есть 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:>)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.