Necesito ayuda con grep+regex

Necesito ayuda con grep+regex

Estoy tratando de encontrar el conjunto de palabras (si las hay) que contienen dos e consecutivas y también contienen dos y. Pero hasta ahora intenté seguir los comandos,

grep -e '[y&y].*[ee]' -e '[y&y].*[ee]' words2.txt 
grep -e 'y.y' -e 'ee' words2.txt
grep -X '.*[y.y].*&.*[ee].*' words2.txt 
grep -X '.[*y.y].*&.[*ee].*' words2.txt

algunos de estos comandos dan dos y o dos e consecutivas, pero no proporciones una palabra que contenga ambas condiciones. ¿Qué debería hacer ahora?

Respuesta1

Supongo que su archivo se parece a esto:

beeyy yeey open iee eey yeefy
funny reenydy jyyee

y se llama words2.txt. Sí, los contenidos son algo aleatorios. Esto mostrará el conjunto de palabras que contienen dos caracteres consecutivos eey dos :y

< words2.txt tr ' ' '\n' | grep 'ee' | grep 'y.*y'

Esto primero garantiza que cada palabra esté en su propia línea con tr, luego greps para dos consecutivas ey luego greps nuevamente para dos (posiblemente no consecutivas) y. Dado que cada uno grepes un filtro, el resultado final es el conjunto de palabras que contienen consecutivas eey dos y.

Según mi entrada, el resultado es:

beeyy
yeey
yeefy
reenydy
jyyee

Respuesta2

suponiendo que quierasexactamente dos ys y noal menos dos ys, con GNU grepsi se construye con soporte PCRE:

grep -Pow '(?=\w*y\w*y)(?!\w*y\w*y\w*y)\w*ee\w*'

O conabiertogrep(2014-01-26 o más reciente):

grep -Xow '\w*ee*\w*&\w*y\w*y\w*&(\w*y\w*y\w*y\w*)!'

Si también desea al menos una secuencia deexactamente dos es (y no 3 o más), es decir, por ejemplo, coincide con eeyyo eeyyeeepero no eeeyy), con GNU grep -P:

grep -Pow '(?=\w*y\w*y)(?!\w*y\w*y\w*y)\w*(?<!e)ee(?!e)\w*'

Respuesta3

Sólo una variante de la respuesta de Fox:

grep -Po '\w*ee\w*'  words.txt | grep 'y.*y'

si quieres exactamente 2 ys:

... | grep -v 'y.*y.*y' 

información relacionada