¿Comando que resalta expresiones regulares en el texto?

¿Comando que resalta expresiones regulares en el texto?

¿Existe algún comando que resalte una determinada expresión en el texto?

Estoy buscando algo como la función 'buscar' en less, pero con salida de texto normal en stdout, en lugar del lessvisor.

Ejemplo:

$ cat test.txt | highlight "an"

Prospectos paraunRetirada ordenada de la OTAN de Afganistánunesunsufrió dos reveses cuando el presidente Hamid Karzai demunlímites establecidos para las tropas estadounidensesund los talibanesuninterrumpió las conversaciones de paz.

Podría usar color o cualquier otro medio para resaltar la expresión regular especificada.

Respuesta1

No estoy seguro si esto se debe a una característica o simplemente a algún efecto secundario oculto, pero esto funciona en GNU grep2.11:

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

Respuesta2

acktiene una --passthruopción que hará esto:

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

Respuesta3

Puedes probar este script mío. Le permitirá especificar un archivo o tomará una entrada estándar. Puede definir una expresión regular de Python para el texto que desea resaltar. El texto resaltado por defecto es verde neón (¡oye, uso un fondo negro!) Pero puedes cambiar el color.Código de colores 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)

Aquí estáunejemplo.

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

Prospectos paraunRetirada ordenada de la OTAN de Afganistánunesunsufrió dos reveses cuando el presidente Hamid Karzai demunlímites establecidos para las tropas estadounidensesund los talibanesuninterrumpió las conversaciones de paz.

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

Perspectivas de un ordenOTANretiro deAfganistánsufrió dos reveses cuando el presidente Hamid Karzai exigió límites a las tropas estadounidenses y los talibanes detuvieron las conversaciones de paz.

Respuesta4

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

"color" también funciona. También puedes definir un alias para que grep siempre use la opción:

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

Coloque lo anterior en /etc/profile.d/ en algún lugar o en su .bashrc o lo que sea.

información relacionada