Questão Less e Grep: Obtendo resultados coloridos ao usar um pipe do grep para menos


Eu uso muito a opção --colour do grep, mas freqüentemente uso menos também. Como posso canalizar o grep para menos e ainda preservar a cor. (Ou isso é possível?)

grep "search-string" -R * --colour | less 

EDITAR:

Estou procurando uma solução direta ou qualquer coisa equivalente a isso.


211


origem


possível duplicata de Obter cores no comando 'less' ' - Ciro Santilli 新疆改造中心 六四事件 法轮功


Respostas:


Quando você simplesmente corre grep --color isso implica grep --color=auto que detecta se a saída é um terminal e, se assim for, ativa as cores. No entanto, quando detecta um cano, ele desabilita a coloração. O seguinte comando:

grep --color=always -R "search string" * | less

Sempre habilitará a coloração e anulará a detecção automática, e você obterá o destaque da cor em less.

EDITAR: Embora usando apenas less funciona para mim, talvez versão mais antiga exigir o -R bandeira para manipular cores, como ali sugerido.


243



Você precisa usar less -R para que a codificação de cores seja interpretada de forma menos correta - therefromhere
Funcionou para mim com apenas less, pode ser dependente da versão. - drrlvn
Um (espero) adendo útil: eu precisava excluir algumas correspondências, mas manter a coloração, então acabei ficando com grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, que atendeu minhas necessidades perfeitamente. (Obrigado novamente!) - Owen Blacker
Eu não posso acreditar que eles apenas implementaram o recurso de manuseio de cores em less e, portanto, perdeu a chance de ter um especial colorless ferramenta. Para o nome sozinho, deveria ter sido feito! Eu provavelmente deveria escrever um patch que invoca -R automaticamente quando o binário é executado como colorless. - Christian
@OwenBlacker Pode não ser um alias. Você talvez tenha $LESS Definido com -R. - greyfade


Você pode colocar isso no seu .bashrc Arquivo:

export GREP_OPTIONS="--color=always"

ou crie um alias como este:

alias grepc="grep --color=always"

e você precisará usar o -R opção para less, como apontado por lá de lá


27



Atenção !: GREP_OPTIONS = "- color = always" pode quebrar muitos scripts que usam grep (ou (e | f) grep). - mctylr
Sim, melhor apenas alias grep. Você sempre pode ficar puro grep com GREPou anule o --color opção manualmente. - asmeurer
Isso não funciona para mim, alias funciona embora. - saeedgnu


Em caso assim, eu prefiro realmente criar pequenos arquivos sh e colocá-los em /usr/local/bin.
Eu costumo usar grep da maneira recursiva no pwd, então é meu roteiro pessoal:

#!/bin/sh
grep --color=always -r "$@" . | less -R

E então eu apenas copiei como /usr/local/bin/g (sim, eu uso muito)


4



Por que não usar apenas funções do shell para esse tipo de coisa? g() { grep --color=always -r "$@" . | less -R } funciona de forma idêntica e provavelmente dará (minuciosamente) melhor desempenho. - 00dani


Não alias "grep", melhor para alias "less", que nunca é usado por shells. Na tua .bashrc apenas coloque: alias less="less -r".


0



Não muito certo. É preciso usar ambos  grep --color=always e less -R. Note que o grep só sabe que está sendo canalizado para algum outro processo e o --color=auto opção usa apenas essa informação para decidir se as cores serão exibidas ou não. - brandizzi
Observe que less opção -r é diferente do que -R. Provavelmente -R é mais seguro. - Craig McQueen
Então, por que votar na minha solução? O OP solicita especificamente less com o exemplo já usando a opção `--color '. - not2qubit
Um alias é provavelmente indesejável aqui. less suporta um $LESS variável de ambiente. Então, ao invés de um alias, export LESS='-R' pode ser preferível. - greyfade


Eu preciso correr

grep --color=always -R "search string" * | less - r

com o -r bandeira depois Menos, para que isso funcione.


0