¿Cómo encontrar coincidencias con las palabras circundantes?

¿Cómo encontrar coincidencias con las palabras circundantes?

Quiero encontrar coincidencias con las palabras circundantes.También quiero que sea rápido.

Esto es lo que tengo:

grep -o -P '(\w+ ){0,n}match( \w+){0,m}'

n es el número de palabras antes de la frase, m es el número de palabras después de la frase. coincidencia es la frase que estoy buscando.

¿Existe alguna forma más rápida de hacerlo?

ejemplo:

echo word1 word2 word3 123 word4 word5 word6 | grep -o -P '(\w+ ){0,2}123( \w+){0,2}'

=> word2 word3 123 word4 word5.

Respuesta1

(\w+ )coincidirá con una palabra o parte de una palabra. Esto significa que greptratará cada carácter de cada palabra como un posible inicio de partida. En su ejemplo, considerará cada uno de

  • word1
  • ord1
  • rd1
  • d1
  • 1

antes de pasar al partido exitoso (comenzando en word2).

Como está interesado en encontrar palabras completas, puede evitar todos los intentos de coincidencias a mitad de palabra incluyendo límites de palabras en el patrón:

grep -P '\<(\w+ ){0,2}123( \w+){0,2}\>'

Otro efecto de esto es evitar coincidencias 123cuando aparece dentro de una palabra más larga.

Esto me redujo el tiempo en un factor de 100 (caso de prueba: buscar la palabra "yo" en Ulises)

La sección "Errores" dehttp://www.regular-expressions.info/examples.htmltiene algunos buenos consejos sobre lo que hace que las expresiones regulares sean lentas.

información relacionada