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.