Cómo obtener el rango de historial de shell Bash

9

¿Cómo puedo obtener / filtrar entradas del historial en un rango específico?

Tengo un archivo de historial grande y uso con frecuencia

history | grep somecommand

Ahora, mi memoria es bastante mala y también quiero ver qué más hice cuando ingresé el comando.

Por ahora hago esto: obtener partido, digamos 4992 somecommand, luego lo hago

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

esto suele ser lo suficientemente bueno, pero preferiría hacerlo con más precisión, es decir, ver comandos desde 4972 hasta 5012, es decir, 20 comandos antes y 20 después.

Me pregunto si hay una manera más fácil? Sospecho que un script personalizado está en orden, pero tal vez alguien más haya hecho algo similar antes.

Aniti
fuente
Para la manipulación de la historia hay 2 incorporados: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK dice Reinstate Monica

Respuestas:

13

Puede indicar grepque imprima algunas líneas que rodean el partido, por ejemplo, 3 antes y 5 después:

history | grep -B 3 -A 5 somecommand

grep -C 4es equivalente a grep -A 4 -B 4.

Pero a menudo no sabrá con precisión cuántas líneas desea de antemano. Así que usa menos y busca dentro de él. Incluso puede iniciar la búsqueda desde la línea de comando:

history | less +/somecommand
Gilles 'SO- deja de ser malvado'
fuente
1
truco muy genial con less! No sabía que podía hacer eso
warren
Muy agradable de hecho ... puedo ver "alrededor" del comando que estoy buscando, incluso cuando realmente no lo estoy buscando específicamente, ¡pero recuerdo haberlo usado cuando usé otro comando relevante! Buenas cosas tnx.
Khalil Gharbaoui
8

Prueba fc:

fc -l 4972 5012

... es un comando bash incorporado. (así que no lo intentes en tcsh:>)

Rondó
fuente
4

tratar history | grep -C20 '^4992'

Codificador casual
fuente