Como obter o intervalo do histórico do shell Bash

9

Como posso obter / filtrar entradas do histórico em um intervalo específico?

Eu tenho um grande arquivo de histórico e uso frequentemente

history | grep somecommand

Agora, minha memória está muito ruim e também quero ver o que mais fiz no momento em que inseri o comando.

Por enquanto, faço isso: concordo, digamos 4992 somecommand, então faço

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

isso geralmente é bom o suficiente, mas eu prefiro fazê-lo com mais precisão, ou seja, ver comandos de 4972 a 5012, ou seja, 20 comandos antes e 20 depois.

Gostaria de saber se existe uma maneira mais fácil? Eu suspeito que um script personalizado esteja em ordem, mas talvez alguém tenha feito algo semelhante antes.

Aniti
fonte
Para manipulação de histórico, existem 2 itens internos
LAFK diz Reinstate Monica

Respostas:

13

Você pode dizer greppara imprimir algumas linhas ao redor da partida, por exemplo, 3 antes e 5 depois:

history | grep -B 3 -A 5 somecommand

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

Mas muitas vezes você não sabe exatamente quantas linhas deseja com antecedência. Portanto, use menos e pesquise dentro dele. Você pode até iniciar a pesquisa na linha de comando:

history | less +/somecommand
Gilles 'SO- parar de ser mau'
fonte
1
truque muito legal com less! Não sabia que você poderia fazer isso #
4151 de warren
Muito bom mesmo ... Eu posso ver "ao redor" o comando que estou procurando, mesmo quando não estou procurando especificamente, mas lembro de usá-lo quando usei outro comando relevante! Coisas boas tnx.
Khalil Gharbaoui
8

Tente fc:

fc -l 4972 5012

... é um comando interno do bash. (então não tente no tcsh:>)

Rondó
fonte
4

tentar history | grep -C20 '^4992'

Casual Coder
fonte