9

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

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

history | grep somecommand

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

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

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

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

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

3 ответа3

12

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

history | grep -B 3 -A 5 somecommand

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

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

history | less +/somecommand
8

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

fc -l 4972 5012

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

4

попробуйте history | grep -C20 '^4992'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .