coloração condicional no grep

2

Eu tenho um script simples de bash . Uma linha do meu script corresponde a um "padrão" com o grep e colore a correspondência

grep -i --color=always -- "$1"

Eu preciso modificá-lo, para que ele apenas cole a correspondência, se a linha não for um comentário (ou seja, se não começar com # ). Em outras palavras: ainda quero que o grep corresponda à linha comentada, mas sem colori-la.

Digamos que eu tenha o seguinte arquivo de texto (com números de linha adicionados)

1 aaa PATTERN
2 bbb ccc PATTERN ddd
3 # eee PATTERN
4 fff ggg

Eu preciso que minha expressão grep corresponda às linhas 1,2,3, mas apenas colora as linhas que não são comentadas (1 e 2)

    
por Martin Vegter 25.05.2014 / 15:31

3 respostas

4

Usando GNU grep com -P opção:

$ grep PATTERN file | grep -P '^[^#]*\KPATTERN|^'
aaa PATTERN
bbb ccc PATTERN ddd
# eee PATTERN

\K faz com que todas as coisas à esquerda de PATTERN não sejam incluídas na string correspondente. Esta solução assume que seu grep está com alias para grep --color=auto

    
por 25.05.2014 / 20:28
2

Não é possível ter grep coloração condicional dessa maneira. Só pode destacar o "PADRÃO" que está combinando.

    
por 25.05.2014 / 15:50
1

apenas um pequeno hack: grep -E 'PATTERN' <filename> | grep --color -E "^[^#]*|$" -

você pode usar isto: primeiro grep corresponde às linhas com PATTERN e segundas grep cores que não começam com '#'.

Eu não acho que grep --color possa fazer coloração condicional.

    
por 25.05.2014 / 15:57