Ver um intervalo de histórico bash

26

O comando history lista todo o histórico da sessão atual. Como:

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

Para pesquisar itens de interesse, posso canalizar history com grep like

history | grep ls
1 ls
6 ls
10 ls

Eu também posso ver os últimos 3 comandos como:

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

Mas como obtenho um intervalo específico de histórico? Por exemplo, algo como:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..
    
por User528491 22.06.2016 / 05:43

3 respostas

44

Em vez de history , você pode usar fc , que permitem selecionar o intervalo:

fc -l 4 7
    
por 22.06.2016 / 06:08
9

Se você precisar usar o comando history, canalize-o através de sed ou awk:

history | sed -n '10,20p'

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

Caso contrário, a resposta do cuonglm é a melhor opção.

    
por 22.06.2016 / 10:32
0

Usar o histórico com um grep nos números de linha ao redor do comando que estou procurando funciona melhor para mim.

Por exemplo, estou procurando o que fiz em torno de ping mybox , mais ou menos 20 linhas.

$ history | grep "ping mybox" 20325 ping mybox

Essa é a linha 20325 , por isso só preciso percorrer as linhas iniciadas por um número no intervalo [20320..20339] .

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

    
por 06.10.2017 / 10:38