Imagine que você gostaria less
de rolar automaticamente até o fim. Fácil, como afirma o manual, faça less +G
.
Imagine que você gostaria less
de começar do início, mas depois de absorver toda a entrada. Fácil, faça less +Gg
(até o fim e depois de volta ao começo), ele suporta vários encadeamentos de comandos. Você não acredita? Sequências de cadeia Gg
suficientes e você acabará assistindo less
indo e voltando.
Imagine que você queira less
avançar para a sexta ocorrência da ==
sequência. Não pode usar less +/==nnnnn
! Isso pesquisa ==nnnnn
, em vez de pesquisar ==
e pesquisar nas próximas cinco vezes. O que fazer agora?
Imagine que você poderia, de fato, especificar vários comandos separados como este:
Se isso não tivesse funcionado, você poderia incorporar uma nova linha literal no parâmetro:
Este método usa
awk
para encontrar o número da linha da string e o usa como parâmetro paraless
:Isso foi inspirado no script de pós-shell Stack Overflow para encontrar a enésima ocorrência de uma string e imprimir o número da linha , onde são encontrados mais métodos para encontrar o número da linha.
Para facilidade de uso, este comando pode ser incorporado em uma função bash com o arquivo, string e número de ocorrência como parâmetros.
Em resumo
Para isso fiz uma função
então eu chamo como
Pedindo para
grep
encontrar o padrão, imprima o número da linha,-n
, pare após a m-ésima ocorrência-m$2
, corte o númerocut -f
d:, taking the last one
tail -n 1`...Ele pode ser otimizado (para arquivos muito grandes) procurando o byte como um dado binário e, em seguida, apontando
less
para esse byte...... ou pode ser usado
sed
de forma mais compacta para extrair o linenumber (sed -n '/pattern/=' myfile
)...