Comando que destaca o regex no texto?

14

Existe um comando que destaca uma determinada expressão no texto?

Estou procurando algo como a função 'pesquisa' em menos, mas com saída de texto normal no stdout, em vez do less viewer.

Exemplo:

$ cat test.txt | highlight "an"

Prospects for an orderly NATO withdrawal from Afghanistan suffered two setbacks as President Hamid Karzai demanded limits on United States troops and the Taliban halted peace talks.

Ele pode usar cores ou qualquer outro meio para destacar a expressão regular especificada.

    
por Frank 15.03.2012 / 23:39

4 respostas

17

Não tenho certeza se isso é devido a um recurso ou apenas algum efeito colateral oculto, mas isso funciona no GNU grep 2.11:

grep --color 'an\|' test.txt
    
por 16.03.2012 / 10:31
9

ack tem uma opção --passthru que fará isso:

ack --passthru an test.txt
some_command | ack --passthru an -
    
por 15.03.2012 / 23:59
2

Você pode experimentar este meu script. Ele permitirá que você especifique um arquivo ou receba uma entrada padrão. Você pode definir uma expressão regular do Python para o texto que deseja destacar. o texto realçado é padronizado para neon verde (ei, eu uso um fundo preto!) Mas você pode alterar o código de cor ANSI .

#!/usr/bin/env python

import sys
import re

def highlight_text(text,pat):
    def replacement_funk(matchobj):  return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
    return re.sub(pat,replacement_funk,text)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        input = sys.stdin
        pat = sys.argv[1]
    elif len(sys.argv) == 3:
        input = open(sys.argv[2])
        pat = sys.argv[1]
    else:
        sys.stderr.write("colorme pattern [inputfile]")
    text = input.read()
    print highlight_text(text,pat)

Aqui está um exemplo.

blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an

As perspectivas para uma retirada ordenada da OTAN da África do Sul e um sofreram dois contratempos como o presidente Hamid Karzai dem an > limites impostos às tropas dos Estados Unidos e d o Talib an interromperam as negociações de paz.

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

As perspectivas de uma retirada ordenada da OTAN do Afeganistão sofreram dois reveses como Presidente Hamid Karzai exigiu limites para as tropas dos Estados Unidos e o Taleban suspendeu as negociações de paz.

    
por 16.03.2012 / 07:04
0

$cat test.txt | grep --colour=auto -C 100000 an

"cor" também funciona. Você também pode definir um apelido para fazer o grep sempre usar a opção:

alias grep='grep --colour=auto -C 100000'

Coloque o acima em /etc/profile.d/ em algum lugar ou em seu .bashrc ou qualquer outra coisa.

    
por 16.03.2012 / 00:12