Eu uso muito a opção --colour do grep, mas geralmente uso menos também. Como posso canalizar menos os resultados de grep e ainda preservar a coloração. (Ou isso é possível?)
grep "search-string" -R * --colour | less
EDIT :
Estou procurando uma solução direta ou algo equivalente a isso.
*
faz? Na página de manual do grep:*: The preceding item will be matched zero or more times.
Mas eu ainda não entendo ..! @JeremyPowellRespostas:
Quando você simplesmente executa
grep --color
, implica emgrep --color=auto
qual detecta se a saída é um terminal e, em caso afirmativo, ativa as cores. No entanto, quando detecta um tubo, desativa a coloração. O seguinte comando:Sempre habilitará a cor e substituirá a detecção automática, e você obterá a cor destacada
less
.EDIT: Embora o uso apenas
less
funcione para mim, talvez a versão mais antiga exija o-R
sinalizador para manipular cores, como sugerido a partir daí.fonte
less -R
para que a codificação de cores seja interpretada de maneira menos corretaless
, pode ser dependente da versão.grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R
, o que atendeu às minhas necessidades perfeitamente. (Obrigado mais uma vez!)less
e, portanto, perderam a chance de ter umacolorless
ferramenta especial . Só pelo nome, deveria ter sido feito! Provavelmente eu deveria escrever um patch que chama -R automaticamente quando o binário é executado comocolorless
.$LESS
definido com-R
.Você pode colocar isso no seu
.bashrc
arquivo:ou crie um alias como este:
e você precisará usar a
-R
opção paraless
, como apontado por láfonte
grep
comGREP
ou substituir o--color
opção manualmente.Nesse caso, eu prefiro criar pequenos arquivos sh e colocá-los
/usr/local/bin
.Eu costumo usar de
grep
maneira recursiva nopwd
, então esse é o meu script pessoal:E então eu apenas copiei como
/usr/local/bin/g
(sim, eu uso muito)fonte
g() { grep --color=always -r "$@" . | less -R }
funciona de forma idêntica e provavelmente fornecerá (minuciosamente) melhor desempenho.Não alias "grep", melhor para alias "less", que nunca é usado por shells. Em sua
.bashrc
basta colocar:alias less="less -r"
.fonte
grep --color=always
eless -R
. Observe que o grep sabe apenas que está sendo canalizado para outro processo e a--color=auto
opção usa somente essas informações para decidir se as cores serão exibidas ou não.less
opção-r
é diferente de-R
. Provavelmente-R
é mais seguro.less
com o exemplo já usando a opção `--color '.less
suporta uma$LESS
variável de ambiente. Portanto, em vez de um alias,export LESS='-R'
pode ser preferível.Eu preciso correr
com o sinalizador -r depois de menos , para que seja executado.
fonte
*
faz? Na página de manual do grep:*: The preceding item will be matched zero or more times.
Mas eu ainda não entendo ..!