Команда history
выводит всю историю текущего сеанса. Например:
1 ls
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history
Для поиска интересующих меня элементов я могу history
использовать grep
команду
history | grep ls
1 ls
6 ls
10 ls
Я также могу просмотреть последние 3 команды, например:
history 3
11 history
12 history | grep ls
13 history 3
Но как мне получить определенный диапазон истории? Например, что-то вроде:
history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
решение1
Вместо history
, вы можете использоватьfc
, которые позволяют выбрать диапазон:
fc -l 4 7
решение2
Если выдолжениспользуйте команду history, пропустите ее через sed или awk:
history | sed -n '10,20p'
history | awk 'NR >= 10 && NR <= 20'
В противном случае ответ cuonglm будет лучшим вариантом.
решение3
Использование истории сgrep по номерам строквокруг команды, которую я ищу, работает лучше всего для меня.
Например, я ищу то, что я сделал ping mybox
примерно в 20 строках.
$ history | grep "ping mybox" 20325 ping mybox
Это строка 20325
, поэтому мне просто нужно отобрать строки, начинающиеся с числа в этом [20320..20339]
диапазоне.
$ history | grep ^203[2-3][0-9]
решение4
Если вам необходимо использовать «history», вот более правильная версия на основе sed для строк истории 4-7:
history | sed '/^4 /,/^7 /!d;/^7 /q'
Это отражает намерение автора сообщения напечатать n-е строки истории, а не n-е строки вывода команды history. Почти всегда эти два значения будут разными. Например, числа, которые интересуют автора сообщения в этом выводе истории:
... 20 preceding lines.
12134 ls dataDir
12135 ls myDir
12136 ls something
... some more lines
являются 12134,12135,12136, а не 21,22,23, и команда sed должна это зафиксировать, в данном случае что-то вроде этого:
history | sed '/^12134 /,/^12135 /!d;/^12135 /q'
Конкретный формат чисел:
'/^n[space]/'
передает намерение, что число находится в начале строки, и что за ним следует пробел. (Когда я смотрю на это, я думаю, что пробел излишен, но это заставляет меня чувствовать себя лучше, ха.)
И да, как сказал @G.Gabunia выше, fc проще