Comando que destaca regex no texto?

Comando que destaca regex no texto?

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

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

Exemplo:

$ cat test.txt | highlight "an"

Perspectivas deumRetirada ordenada da OTAN do Afeganistãoumistumsofreu dois reveses quando o presidente Hamid Karzai demumlimites estabelecidos para as tropas dos Estados Unidosumo Talibuminterrompeu as negociações de paz.

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

Responder1

Não tenho certeza se isso se deve a um recurso ou apenas a algum efeito colateral oculto, mas funciona no GNU grep2.11:

grep --color 'an\|' test.txt

Responder2

acktem uma --passthruopção que fará isso:

ack --passthru an test.txt
some_command | ack --passthru an -

Responder3

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 Python para o texto que deseja destacar. o texto destacado é verde neon (ei, eu uso um fundo preto!) Mas você pode alterar oCódigo de cores 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áumexemplo.

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

Perspectivas deumRetirada ordenada da OTAN do Afeganistãoumistumsofreu dois reveses quando o presidente Hamid Karzai demumlimites estabelecidos para as tropas dos Estados Unidosumo Talibuminterrompeu as negociações de paz.

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

Perspectivas para um ordenamentoOTANretirada deAfeganistãosofreu dois reveses quando o presidente Hamid Karzai exigiu limites às tropas dos Estados Unidos e os talibãs suspenderam as negociações de paz.

Responder4

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

"cor" também funciona. Você também pode definir um alias para fazer com que o grep sempre use a opção:

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

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

informação relacionada