Как просмотреть историю 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