Как просмотреть историю bash между номерами строк

Каждый раз, когда мне это нужно, я гуглю это как 10 минут. Я не знаю, как это лучше выразить, чтобы Google нашел это сразу, но мне нужно получить историю bash между некоторыми строками, такими как:

$ history --start 321 --end 456
#to retrieve history from 321 and to 456

4 ответа

Решение

Вы можете использовать что-то вроде

история | grep -A 135 -w 321

Он начинается со строки 321 и показывает следующие 135 строк, поэтому он показывает строки с 321 по 456.

Используйте голову и хвост.

history | head -n 456 | tail -n 136

Который получит первые 456 (до нужного вам конца), а затем вы получите последние 136 (что вычисляется как 456 - 136 = 320, но будет извлечено из 321-й записи из истории).

Приведенное ниже решение направлено на наименьшее количество зависимостей, наименьшее количество математических вычислений, максимальную читабельность (проверено под GNUgrep):

      # Display history lines exactly from line321 to line456
history | grep -A $((456-321)) '321\ \ '

# Or throw away 'Space Escaping', a even 
# more simple command we'd get , but the output 
# will contain one more line, which is this command itself.
history | grep -A $((456-321)) '321  '

с выводом:

      321 some-command
322 some-command
...
...
...
456 some-command

Я предполагаю, что вы имеете в виду номера команд, а не номера строк. я хотел бы использоватьsedчтобы дать мне строки в файле между двумя номерами команд.

      $ history | sed -n '/^ 321 /,/^ 456 /p'

^символы совпадают в начале строки. Также пробел после номера, чтобы убедиться^ 321не соответствует строке, равной32155 ls

Другие вопросы по тегам