¿Cómo concateno estas dos expresiones regulares grep?

¿Cómo concateno estas dos expresiones regulares grep?

Tengo estas dos expresiones regulares grep

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt

y

grep -e '[Ee][Ee].*[Yy].*[Yy]' first.txt

¿Cómo concateno estos dos en una sola expresión regular?

Respuesta1

¿Concatenando los patrones?

grep -e '[Yy].*[Yy].[Ee][Ee][Ee][Ee].*[Yy].*[Yy]' first.txt

¿O te refieres esencialmente a hacer un AND lógico de los dos patrones?

Si es lo último, debe fingir, ya que si bien tiene OR ( ) y NOT ( ; ) grepincorporados , no tiene un AND incorporado. Una forma es canalizar la salida de uno al otro:|-v[^]grep

grep -e '[Yy].*[Yy].[Ee][Ee]' first.txt | grep '[Ee][Ee].*[Yy].*[Yy]' 

La otra forma es buscar ambos patrones en serie, en cualquier orden, con un OR lógico (abreviado para mayor brevedad):

grep -Ee 'pattern1.*pattern2|pattern2.*pattern1' input.txt

Considero que el primero es más conciso y más fácil de mantener.

Respuesta2

Puede buscar ambos patrones a la vez usándolos \|entre cada patrón.

grep -e '[Yy].*[Yy].[Ee][Ee]'\|'[Ee][Ee].*[Yy].*[Yy]'

información relacionada