Comment obtenir la plage d'historique du shell Bash

9

Comment puis-je obtenir / filtrer les entrées d'historique dans une plage spécifique?

J'ai un gros fichier historique et j'utilise fréquemment

history | grep somecommand

Maintenant, ma mémoire est assez mauvaise et je veux aussi voir ce que j'ai fait d'autre au moment où j'ai entré la commande.

Pour l'instant je fais ça: obtenir un match, disons 4992 somecommand, alors je fais

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

c'est généralement assez bon, mais je préfère de loin le faire plus précisément, c'est-à-dire voir les commandes de 4972 à 5012, soit 20 commandes avant et 20 après.

Je me demande s'il existe un moyen plus simple? Je soupçonne qu'un script personnalisé est en règle, mais peut-être que quelqu'un d'autre a déjà fait quelque chose de similaire auparavant.

Aniti
la source
Pour la manipulation de l'historique, il y a 2 fonctions intégrées: gnu.huihoo.org/bash-2.02/html_node/bashref_73.html
LAFK dit Reinstate Monica

Réponses:

13

Vous pouvez dire grepd'imprimer certaines lignes entourant la correspondance, par exemple, 3 avant et 5 après:

history | grep -B 3 -A 5 somecommand

grep -C 4est équivalent à grep -A 4 -B 4.

Mais souvent, vous ne saurez pas exactement combien de lignes vous souhaitez à l'avance. Utilisez donc moins et cherchez à l'intérieur. Vous pouvez même lancer la recherche depuis la ligne de commande:

history | less +/somecommand
Gilles 'SO- arrête d'être méchant'
la source
1
truc très cool avec less! Je ne savais pas que tu pouvais faire ça
Warren
Très bien en effet ... Je peux voir "autour" de la commande que je recherche, même lorsque je ne la recherche pas vraiment spécifiquement mais je me souviens de l'avoir utilisée quand j'ai utilisé une autre commande pertinente! Bonnes choses tnx.
Khalil Gharbaoui
8

Essayez fc:

fc -l 4972 5012

... c'est une commande bash intégrée. (alors ne l'essayez pas dans tcsh:>)

Rondo
la source
4

essayer history | grep -C20 '^4992'

Codeur occasionnel
la source