Jak uzyskać zakres historii powłoki Bash


9

Jak mogę pobrać / filtrować wpisy historii w określonym zakresie?

Mam duży plik historii i często go używam

history | grep somecommand

Teraz moja pamięć jest dość zła i chcę też zobaczyć, co jeszcze zrobiłem w czasie, gdy wprowadziłem polecenie.

Na razie robię to: dopasuj, powiedz 4992 somecommand, potem zrobię

history | grep 49[0-9][0-9]

zwykle jest to wystarczająco dobre, ale wolałbym to zrobić dokładniej, to znaczy zobaczyć polecenia od 4972 do 5012, czyli 20 poleceń przed i 20 po.

Zastanawiam się, czy istnieje łatwiejszy sposób? Podejrzewam, że niestandardowy skrypt jest w porządku, ale być może ktoś inny zrobił wcześniej coś podobnego.


Odpowiedzi:


13

Możesz nakazać grepwydrukowanie niektórych linii otaczających dopasowanie, np. 3 przed i 5 po:

history | grep -B 3 -A 5 somecommand

grep -C 4jest równoważne z grep -A 4 -B 4.

Ale często nie wiesz dokładnie, ile linii chcesz z góry. Więc używaj mniej i szukaj w nim. Możesz nawet uruchomić wyszukiwanie z wiersza poleceń:

history | less +/somecommand

1
bardzo fajna sztuczka z less! Nie wiedziałem, że możesz to zrobić
warren

Rzeczywiście bardzo fajnie ... Widzę "wokół" polecenia, którego szukam, nawet jeśli tak naprawdę go nie szukam, ale pamiętam, że użyłem go, gdy użyłem innego odpowiedniego polecenia! Dobre rzeczy tnx.
Khalil Gharbaoui

8

Spróbuj fc:

fc -l 4972 5012

... to wbudowane polecenie bash. (więc nie próbuj tego w tcsh:>)


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.