Перегляд діапазону історії баш


30

У 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 ..

Ви можете перелічити останні xкоманди, до яких передаються head.
Братчлі

@Bratchley: Для цього я повинен знати, скільки останніх команд потрібно пройти. Враховуйте це, мої history | grep somethingпоказують результати команд, пронумерованих 123 234 345в історії, і я, можливо, не знаю кількість останньої виконаної команди ( historyв даному випадку). Моя остання команда могла налічувати 400, 500 або будь-яку іншу. Тож спочатку я повинен перевірити це число, з’ясувати різницю, перерахувати останні xкоманди, а потім перейти доhead
Slartibartfast

Відповіді:


52

Замість цього historyви можете використовувати fcдіапазон:

fc -l 4 7

4
Він навіть приймає від’ємні числа, щоб рахувати з кінця, наприклад fc -l -16 -10.
Франклін Ю

хм, дивуйся, навіщо нам потрібна ціла нова команда, а не просто аргументи до фактичної команди ...
Рінго

10

Якщо вам потрібно скористатись командою історія, передайте її через sed або awk:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

Інакше відповідь cuonglm - кращий варіант.


6
Оскільки ми маємо погані альтернативи, комбінація headта tailвирішить цю проблему ще менш елегантним способом. Для діапазону 10-> 25 вам доведеться використовувати history | head 25 | tail 15.
Аарон

1

Використання історії з грейпом на номерах рядків навколо команди, яку я шукаю, найкраще працює для мене.

Наприклад, я шукаю те, що я робив навколо ping mybox, більш-менш 20 рядків.

$ history | grep "ping mybox" 20325 ping mybox

Це рядок, 20325тому мені просто потрібно зібрати рядки, починаючи з числа в [20320..20339]діапазоні.

$ history | grep ^203[2-3][0-9]


(1) Ви кажете "більше або менше 20", але ваш приклад показує −5 та +14. (2) Це не працює для мене, оскільки, здається, номери історії мають провідні місця.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.