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

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

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

history | grep somecommand

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

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

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

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

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

9 голосов | спросил Aniti 4 +04002010-10-04T15:12:53+04:00312010bEurope/MoscowMon, 04 Oct 2010 15:12:53 +0400 2010, 15:12:53

3 ответа


11

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

history | grep -B 3 -A 5 somecommand

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

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

history | less +/somecommand
ответил Gilles 5 +04002010-10-05T02:37:32+04:00312010bEurope/MoscowTue, 05 Oct 2010 02:37:32 +0400 2010, 02:37:32
8

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

fc -l 4972 5012

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

ответил Rondo 18 J0000006Europe/Moscow 2012, 05:48:35
4

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

ответил Casual Coder 4 +04002010-10-04T15:19:30+04:00312010bEurope/MoscowMon, 04 Oct 2010 15:19:30 +0400 2010, 15:19:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132