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

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

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

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

history | grep somecommand

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

Сейчас я делаю так: получаю совпадение, говорю 4992 somecommand, затем делаю

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

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

Интересно, есть ли более простой способ? Подозреваю, что подойдет пользовательский скрипт, но, возможно, кто-то уже делал что-то подобное.

решение1

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

history | grep -B 3 -A 5 somecommand

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

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

history | less +/somecommand

решение2

Попробуйте ФК:

fc -l 4972 5012

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

решение3

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

Связанный контент