Просмотреть диапазон истории bash

Просмотреть диапазон истории bash

Команда 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 проще

Связанный контент