validator validate test pattern online one golang color regex linux

validate - Color regex coincide-sin perder errores



regex perl online (7)

Esta pequeña función funciona bien en mi ZShell:

function color_grep { sed s/$1/$fg[yellow]$1$terminfo[sgr0]/g }

(Necesariamente

autoload colors zsh/terminfo

)

Tal vez puedas hacer algo similar?

Editar: Lo siento, esto no funcionará con expresiones regulares. Tendrás que modificarlo un poco ...

Cuando uso grep --color=always , puedo obtener bonitos colores resaltados para las coincidencias de expresiones regulares.

Sin embargo, grep solo devuelve líneas con al menos una coincidencia. En su lugar, estoy buscando una manera de simplemente resaltar las coincidencias de expresiones regulares, dejando todas las demás entradas por sí solas, sin dejar líneas sin ninguna coincidencia.

He intentado que Color funcione con sed y lea la documentación de grep , pero parece que no puedo obtener lo que quiero.

En caso de que mi descripción no sea obvia, quiero:

ENTRADA:

  • fred
  • Ted
  • rojo
  • dirigir

Regex:

  • ".*rojo"

SALIDA:

  • fred (en rojo)
  • Ted
  • rojo (en rojo)
  • dirigir

Para que yo pudiera hacer:

list_stuff | color_grep "make_this_stand_out_but_dont_hide_the_rest"

EDITAR:

He encontrado una solución, que no es bonita, pero funciona:

Gracias a: http://www.pixelbeat.org/docs/terminal_colours/

Particularmente el guión (que he modificado / simplificado): http://www.pixelbeat.org/talks/iitui/sedgrep

function sedgrep () { C_PATT=`echo -e ''/033[33;01m''` C_NORM=`echo -e ''/033[m''` sed -s "s/$1/${C_PATT}&${C_NORM}/gi" }

¡Todavía estoy buscando una manera más fácil de hacer esto!


La forma en que haces esto ahora es probablemente tan limpia como puedes esperar, a menos que, por supuesto, escribas tu propia herramienta grep. Si no te importa necesariamente preservar el orden de la salida, aquí está la otra manera en que puedo pensar para hacer esto:

function colormatch () { tee - | grep --color=always $1 | sort | uniq }

No es tan eficiente como usar sed (más procesos creados, y dar salida a la salida), así que probablemente recomendaría seguir con su solución sed.


Puede usar la opción -C<num> para grep, que le muestra <num> líneas de contexto alrededor de su coincidencia. Solo asegúrese de que <num> sea ​​tan grande como el número de líneas en su archivo.


Hace poco hice algo similar como filtro. Lo uso para colorear los "encabezados" en una cola con varios archivos, como este:

tail -f access.log error.log foo.log | logcol.sh

Los encabezados se ven así:

==> access.log <==

Me confundieron los rápidos cambios entre los diferentes archivos de registro, por lo que este logcol.sh ayuda. El ==> está codificado para el uso específico, pero también podría ser un parámetro.

#!/bin/sh while read line do if test `expr "$line" : "==>.*"` -eq 0 ; then printf ''/033[0m%s/n'' "$line" else printf ''/033[0;31m%s/n'' "$line" fi done

Quizás no sea el más elegante, pero creo que es bastante legible. Espero no tener ningún error tipográfico ;-) HTH, robar



La solución más simple sería usar egrep --color=always ''text|^'' que coincidiría con todos los comienzos de línea, pero solo colorearía el texto deseado.


Aquí hay un script que uso para colorear el resultado.

Creo que encontré la idea / snippet en algún tipo de tutorial de blog o bash / sed - no puedo encontrarlo más, fue hace mucho tiempo.

#!/bin/bash red=$(tput bold;tput setaf 1) green=$(tput setaf 2) yellow=$(tput bold;tput setaf 3) fawn=$(tput setaf 3) blue=$(tput bold;tput setaf 4) purple=$(tput setaf 5) pink=$(tput bold;tput setaf 5) cyan=$(tput bold;tput setaf 6) gray=$(tput setaf 7) white=$(tput bold;tput setaf 7) normal=$(tput sgr0) sep=`echo -e ''/001''` # use /001 as a separator instead of ''/'' while [ -n "$1" ] ; do color=${!1} pattern="$2" shift 2 rules="$rules;s$sep/($pattern/)$sep$color/1$normal${sep}g" done #stdbuf -o0 -i0 sed -u -e "$rules" sed -u -e "$rules"

Uso:

./colorize.sh color1 pattern1 color2 pattern2 ...

p.ej

dmesg | colorize.sh red ''.*Hardware Error.*'' red ''CPU[0-9]*: Core temperature above threshold'' / green ''wlan.: authenticated.*'' yellow ''wlan.: deauthenticated.*''

No funciona bien con patrones superpuestos, pero de todos modos lo he encontrado muy útil.

HTH