web-dev-qa-db-fra.com

Afficher une gamme d'historique bash

La commande history répertorie tout l'historique de la session en cours. Comme:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

Afin de rechercher des éléments d'intérêt, je peux diriger history avec grep comme

history | grep ls
1 ls
6 ls
10 ls

Je peux également voir les 3 dernières commandes comme:

history 3
11 history
12 history | grep ls
13 history 3

Mais comment puis-je obtenir un historique spécifique? Par exemple quelque chose comme:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
34
Slartibartfast

Au lieu de history, vous pouvez utiliser fc , qui vous permet de sélectionner une plage:

fc -l 4 7
58
cuonglm

Si vous devez utiliser la commande d'historique, dirigez-la via sed ou awk:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

Sinon, la réponse de cuonglm est une meilleure option.

11
G.Gabunia

Utiliser l'historique avec un grep sur les numéros de ligne autour de la commande que je recherche fonctionne le mieux pour moi.

Par exemple, je cherche ce que j'ai fait autour de ping mybox, plus ou moins 20 lignes.

$ history | grep "ping mybox" 20325 ping mybox

C'est la ligne 20325 donc je dois juste grep les lignes commençant par un nombre dans le [20320..20339] gamme.

$ history | grep ^203[2-3][0-9]

1
Luc Yriarte