it-swarm-es.com

Cómo hacer barra vertical | trabajar en grep?

Aquí hay un ejemplo de una línea de comando GREP que he intentado:

grep '(565172|565173|565175)' /var/log/cups/error_log

No produce ninguna salida, aunque los 3 valores estén en el archivo varias veces.

Intenté escapar de las barras, y que mejoraban las cosas, se detectó un valor medio, pero no la primera o la última.

grep '(565172\|565173\|565175)' /var/log/cups/error_log

También probé escapes dobles y volví a no obtener resultados.

grep '(565172\\|565173\\|565175)' /var/log/cups/error_log

¿Qué estoy haciendo mal? Gracias.

10
Mark Ransom

La sintaxis que está tratando de usar pertenece a expresiones regulares extendidas, por lo que la respuesta es muy simple, ya sea que use egrep o incluya el -E bandera.

14
Adam Byrtek

Lo que está trabajando es la diferencia entre expresiones regulares básicas y extendidas. De la página Manual de GREPE:

¿En expresiones regulares básicas los meta-personajes? +, {, |, (Y) pierden su significado especial; En su lugar, use las versiones Backslashed \?, +, {,\|, (y).

Por lo tanto, puedes hacer uno de los siguientes:

 grep '\(565172\|565173\|565175\)' /var/log/cups/error_log

o

grep -E '(565172|565173|565175)' /var/log/cups/error_log

La bandera, se convierte en expresiones regulares "extendidas". GNU GREP también admite expresiones regulares compatibles con Perl.

17
Steven D