Acho grep
a --color=always
bandeira de ser tremendamente útil. No entanto, o grep imprime apenas linhas com correspondências (a menos que você solicite linhas de contexto). Dado que cada linha impressa tem uma correspondência, o realce não adiciona a maior capacidade possível.
Eu realmente gostaria de cat
um arquivo e ver o arquivo inteiro com as correspondências de padrões destacadas.
Existe alguma maneira de dizer ao grep para imprimir todas as linhas que estão sendo lidas, independentemente de haver uma correspondência? Eu sei que poderia escrever um script para executar o grep em todas as linhas de um arquivo, mas fiquei curioso para saber se isso era possível com o padrão grep
.
sed
. ased
solução oferece várias cores ao custo de maior complexidade (em vez de cerca de 30 caracteres, você tem cerca de 60 caracteres).Respostas:
Aqui estão algumas maneiras de fazer isso:
fonte
egrep --color "pattern|" file
(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
. Caso contrário, o realce da cor não ocorrerá.Aqui está algo na mesma linha. As chances são de que você usará menos de qualquer maneira, então tente o seguinte:
Ele destacará o padrão e pulará para a primeira ocorrência dele no arquivo.
fonte
-
:… | less -p pattern -
-i
opção fará com que a correspondência não seja diferenciada como emless -ip pattern file
.less
o-R
comutador:… | less -Rip introduction -
Eu gostaria de recomendar o ack - melhor que o grep, uma ferramenta de busca avançada para programadores .
Eu amo isso porque o padrão é a pesquisa recursiva de diretórios (e é muito mais inteligente do que
grep -r
), suporta expressões regulares completas do Perl (em vez do POSIXishregex(3)
) e possui uma exibição de contexto muito mais agradável ao pesquisar muitos arquivos.fonte
ack
é inteligente, mas às vezes muito inteligente, e EXCLUÍDA o tipo de arquivo que o hit estava.ack -a
irá procurar todos os tipos de arquivos, enquanto ainda excluindo.git/
.svn/
etc.ack
não procure nas minhas imagens, o que-a
faz muito. Eu adicionei--type-set=freemarker=.ftl
ao meu~/.ackrc
, para dar um exemplo.Você pode usar meu
highlight
script em https://github.com/kepkin/dev-shell-essentialsÉ melhor do que
grep
porque você pode destacar cada partida com sua própria cor .fonte
grep
, que é um utilitário padrão em máquinas executando * nix.colout
mencionado em outra resposta.colout
, o que é bom se você quiser inspecionar o que faz.Você também pode criar um alias. Adicione esta função ao seu .bashrc (ou .bash_profile no osx)
Agora você pode usar o alias assim: "
ifconfig | grepe inet
" ou "grepe css index.html
".(PS: não esqueça
source ~/.bashrc
de recarregar o bashrc na sessão atual)fonte
--color=always
vez de--color
less
interpretar os códigos de cores, useless -R
.Use o
colout
programa: http://nojhan.github.io/colout/Ele foi projetado para adicionar realces de cores a um fluxo de texto. Dada uma expressão regular e uma cor (por exemplo, "vermelho"), ele reproduz um fluxo de texto com as correspondências destacadas. por exemplo:
Você pode encadear várias invocações para adicionar vários destaques de cores diferentes:
Ou você pode conseguir o mesmo usando uma regex com N grupos (partes entre parênteses da regex), seguida por uma lista separada por vírgula de N cores.
fonte
grep
, e ele já estiver expandido nas respostas,colout
é a melhor solução para o problema que você teve, a melhor que eu conheço. De acordo com a filosofia do UNIX, os programas devem ser escritos para fazer uma coisa bem. Poisgrep
é filtrar o fluxo de texto. Poiscolout
é colorir ou destacar o fluxo de texto.colout
é uma ferramenta muito útil. Aprendê-lo uma vez, usá-lo em muitas situações, em vez de aprender uma ferramenta para arquivos de log destaque, outra saída de teste para destaque, etc.Eu uso o rcg do "Linux Server Hacks", O'Reilly. É perfeito para o que você deseja e pode destacar várias expressões, cada uma com cores diferentes.
fonte
A
-z
opção para grep também é muito boa!fonte
Adicionei isso ao meu .bash_aliases:
fonte
Para destacar padrões enquanto visualiza o arquivo inteiro, h pode fazer isso.
Além disso, ele usa cores diferentes para diferentes padrões.
Você também pode canalizar a saída de
h
paraless -R
para uma melhor leitura.Para grep e usar 1 cor para cada padrão, o cxpgrep pode ser um bom ajuste.
fonte
Ok, este é um caminho,
lhe dará a contagem de linhas - diga NN, então você pode fazer
fonte
Aqui está um script de shell que usa a função gsub do Awk para substituir o texto que você está procurando pela seqüência de escape adequada para exibi-lo em vermelho brilhante:
Use-o assim:
Infelizmente, ele não tem toda a funcionalidade do grep.
Para obter mais informações, consulte o artigo " So You Like Color " no Linux Journal.
fonte
Uma outra resposta mencionou a opção -Cn do grep, que inclui n linhas de contexto. Às vezes, faço isso com n = 99 como uma maneira rápida e suja de obter [pelo menos] uma tela cheia de contexto quando o padrão egrep parece muito complicado ou quando estou em uma máquina na qual não instalei o rcg e / ou ccze.
Eu descobri recentemente
ccze
que é um colorizador mais poderoso. Minha única reclamação é que ela é orientada à tela (tipoless
, que eu nunca uso por esse motivo), a menos que você especifique a opção -A para a saída "bruto ANSI".+1 para a
rcg
menção acima. Ainda é o meu favorito, pois é muito simples de personalizar em um pseudônimo. Algo como isso geralmente está no meu ~ / .bashrc:alias tailc = 'tail -f / meu / app / log / arquivo | rcg envia "BOLD GREEN" recebe o erro "CYAN" "RED" '
fonte
outra maneira suja:
Eu fiz um
no bashrc.
fonte
Como alternativa, você pode usar o Silver Searcher e fazer
fonte
Se você deseja destacar vários padrões com cores diferentes, consulte este script bash.
Uso básico:
Você pode alterar padrões e cores enquanto estiver executando, pressionando uma tecla e depois a tecla Enter.
fonte
Eu uso o seguinte comando para fins semelhantes:
grep -C 100 searchtext file
Isso indica grep para imprimir 100 * 2 linhas de contexto, antes e depois do texto de pesquisa destacado.
fonte
Aqui está minha abordagem , inspirada na solução do @ kepkin:
Isso aceita vários argumentos (mas não permite que você personalize as cores). Exemplo:
fonte
Option
-C999
fará o truque na ausência de uma opção para exibir todas as linhas de contexto. A maioria das outras variantes do grep também suporta isso. Entretanto: 1) nenhuma saída é produzida quando nenhuma correspondência é encontrada e 2) essa opção tem um impacto negativo na eficiência do grep: quando o-C
valor é grande, muitas linhas podem precisar ser temporariamente armazenadas na memória do grep para determinar quais linhas de contexto para exibir quando ocorrer uma correspondência. Observe que as implementações grep não carregam arquivos de entrada, mas lê algumas linhas ou usam uma janela deslizante sobre a entrada. A "parte anterior" do contexto deve ser mantida em uma janela (memória) para gerar as linhas de contexto "anterior" mais tarde, quando uma correspondência for encontrada.Um padrão como
^|PATTERN
ouPATTERN|$
ou qualquer sub-padrão de correspondência vazia, por exemplo,[^ -~]?|PATTERN
é um bom truque. No entanto, 1) esses padrões não mostram linhas não correspondentes destacadas como contexto e 2) isso não pode ser usado em combinação com outras opções de grep, como-F
e-w
por exemplo.Portanto, nenhuma dessas abordagens me satisfaz. Estou usando o ugrep e o grep aprimorado com a opção
-y
de exibir com eficiência todas as saídas não correspondentes como linhas de contexto destacadas em cores. Outras ferramentas do tipo grep, como ag e ripgrep, também oferecem uma opção de passagem. Mas o ugrep é compatível com o GNU / BSD grep e oferece um superconjunto de opções de grep como-y
e-Q
. Por exemplo, eis a opção-y
mostrada quando combinada com-Q
(UI de consulta interativa para inserir padrões):fonte