linux - examples - grep in windows
Resalte el texto similar a grep, pero no filtre el texto (10)
Como quiere que se resalten las coincidencias, esto es probablemente para consumo humano (en lugar de canalizar a otro programa, por ejemplo), por lo que una buena solución sería utilizar:
less -p <your-pattern> <your-file>
Y si no te importa la sensibilidad a los casos:
less -i -p <your-pattern> <your-file>
Esto también tiene la ventaja de tener páginas, lo cual es bueno cuando se tiene que pasar por una salida larga
Esta pregunta ya tiene una respuesta aquí:
Cuando use grep, se resaltará cualquier texto en una línea que coincida con su expresión regular.
¿Qué pasa si quiero este comportamiento, pero tengo grep imprimir todas las líneas también? Salí vacío después de un vistazo rápido a través de la página de manual de grep.
Puede asegurarse de que todas las líneas coincidan, pero no hay nada que resaltar en las coincidencias irrelevantes
egrep --color ''apple|'' test.txt
Notas:
-
egrep
se puede deletrear tambiéngrep -E
-
--color
es usualmente predeterminado en la mayoría de las distribuciones.
Puede usar mi script de resaltado desde https://github.com/kepkin/dev-shell-essentials
Es mejor que grep porque puedes resaltar cada coincidencia con su propio color .
$ command_here | highlight green "input" | highlight red "output"
Puedes hacerlo usando solo grep por:
- leyendo el archivo línea por línea
- haciendo coincidir un patrón en cada línea y resaltando el patrón con grep
- Si no hay coincidencia, repite la línea como está.
que te da lo siguiente:
while read line ; do (echo $line | grep PATTERN) || echo $line ; done < inputfile
Quizás este es un problema XY , y lo que realmente estás tratando de hacer es resaltar las apariciones de las palabras a medida que aparecen en tu shell. Si es así, puede usar su emulador de terminal para esto. Por ejemplo, en Konsole, inicie Buscar (ctrl + shift + F) y escriba su palabra. La palabra se resaltará cada vez que aparezca en una salida nueva o existente hasta que cancele la función.
Si desea imprimir "todas" las líneas, hay una solución de trabajo simple:
grep "test" -A 9999999 -B 9999999
- A => Después
- B => Antes
Si está buscando un patrón en un directorio de forma recursiva, primero puede guardarlo en un archivo.
ls -1R ./ | list-of-files.txt
Y luego grep eso, o canalizarlo a la búsqueda grep
ls -1R | grep --color -rE ''[A-Z]|''
Esto parecerá enumerar todos los archivos, pero colorear los con letras mayúsculas. Si eliminas la última | Sólo verás los partidos.
Utilizo esto para encontrar imágenes mal nombradas con mayúsculas, por ejemplo, pero el grep normal no muestra la ruta de cada archivo solo una vez por directorio, de esta manera puedo ver el contexto.
Si está haciendo esto porque quiere más contexto en su búsqueda, puede hacerlo:
cat BIG_FILE.txt | less
Hacer una búsqueda en less
debe resaltar sus términos de búsqueda.
O canaliza la salida a tu editor favorito. Un ejemplo :
cat BIG_FILE.txt | vim -
Luego busca / resalta / reemplaza.
Utilice ack. Checkout su opción --passthru
aquí: ack . Tiene el beneficio adicional de permitir expresiones regulares de perl completas.
$ ack --passthru ''pattern1'' file_name
$ command_here | ack --passthru ''pattern1''
También puedes hacerlo usando grep así:
$ grep --color -E ''^|pattern1|pattern2'' file_name
$ command_here | grep --color -E ''^|pattern1|pattern2''
Esto hará coincidir todas las líneas y resaltar los patrones. El ^
coincide con cada inicio de línea, pero no se imprimirá / resaltará ya que no es un carácter.
(Tenga en cuenta que la mayoría de las configuraciones usarán --color de forma predeterminada. Es posible que no necesite esa marca).
EDITAR:
Esto funciona con grep de OS X Mountain Lion:
grep --color -E ''pattern1|pattern2|$''
Esto es mejor que ''^|pattern1|pattern2''
porque la parte ^
de la alternancia coincide al principio de la línea, mientras que la $
coincide al final de la línea. Algunos motores de expresiones regulares no resaltan pattern2
o pattern2
porque ^
ya coincidió y el motor está ansioso .
Algo similar sucede con ''pattern1|pattern2|''
porque el motor de expresiones regulares nota que la alternancia vacía al final de la cadena del patrón coincide con el principio de la cadena del sujeto.
[1]: http://www.regular-expressions.info/engine.html
PRIMERA EDICIÓN:
Terminé usando perl:
perl -pe ''s:pattern:/033[31;1m$&/033[30;0m:g''
Esto supone que tiene un terminal compatible con ANSI.
RESPUESTA ORIGINAL:
Si estás atrapado con un grep
extraño, esto podría funcionar:
grep -E --color=always -A500 -B500 ''pattern1|pattern2'' | grep -v ''^--''
Ajusta los números para obtener todas las líneas que quieras.
El segundo grep
simplemente elimina las líneas extrañas insertadas por el grep
estilo BSD en Mac OS X Mountain Lion, incluso cuando el contexto de coincidencias consecutivas se superponen.
Pensé que GNU grep omitió las líneas cuando el contexto se superpone, pero ha pasado un tiempo así que tal vez recuerde mal.