
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 ee
y 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 grep
s para dos consecutivas e
y luego grep
s nuevamente para dos (posiblemente no consecutivas) y
. Dado que cada uno grep
es un filtro, el resultado final es el conjunto de palabras que contienen consecutivas ee
y dos y
.
Según mi entrada, el resultado es:
beeyy
yeey
yeefy
reenydy
jyyee
Respuesta2
suponiendo que quierasexactamente dos y
s y noal menos dos y
s, con GNU grep
si 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 e
s (y no 3 o más), es decir, por ejemplo, coincide con eeyy
o eeyyeee
pero 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 y
s:
... | grep -v 'y.*y.*y'