
Как получить/отфильтровать записи истории в определенном диапазоне?
У меня большой файл истории, и я часто пользуюсь
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'