Regex para "o" de varias palabras en grep

12
[Computer]$ grep "foo|bar" filename

Entiendo que el comando anterior debe devolver cada línea en el nombre del archivo donde sale "foo" o "bar". Las páginas man confirman | como Regex o símbolo y el código funciona para "foo" y "bar" de forma independiente. ¿Qué me estoy perdiendo?

Ocasta Eshu
fuente

Respuestas:

21

grep usa expresiones regulares básicas (BRE) por defecto. Desde la página del manual:

Expresiones regulares básicas vs extendidas: en las expresiones regulares básicas, los metacaracteres?, +, {, |, (Y) pierden su significado especial; en su lugar use las versiones con barra invertida \ ?, +, {, \ |, (, y).

Entonces tienes que escapar de |:

grep "foo\|bar" filename 

o activar expresiones regulares extendidas:

grep -E "foo|bar" filename
jhenninger
fuente
Lo vi en la página del manual y lo entendí mal. Pensé que significaba que \ | lo haría buscar la expresión completa "foo | bar" en lugar de las expresiones individuales. Gracias por la rápida respuesta!
Ocasta Eshu
44
También puede usar egrep(un alias para grep -E) en lugar de grep.
hablante