
¿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 less
visor.
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 grep
2.11:
grep --color 'an\|' test.txt
Respuesta2
acktiene una --passthru
opció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.