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.

Aniti
źródło
Do manipulacji historią są 2 wbudowane: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK mówi Przywróć Monikę

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
Gilles „SO- przestań być zły”
źródło
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:>)

Rondo
źródło
4

próbować history | grep -C20 '^4992'

Casual Coder
źródło