Como encontrar correspondência com as palavras vizinhas?

Como encontrar correspondência com as palavras vizinhas?

Quero encontrar correspondência com as palavras ao redor.Eu também quero que seja rápido.

Aqui está o que eu tenho:

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

n é o número de palavras antes da frase, m é o número de palavras depois da frase. match é a frase que estou procurando.

Existe alguma maneira mais rápida de fazer isso?

exemplo:

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

=> word2 word3 123 word4 word5.

Responder1

(\w+ )corresponderá a uma palavra ou parte da palavra. Isso significa que greptratará cada caractere em cada palavra como um potencial início de partida. No seu exemplo, ele considerará cada um dos

  • word1
  • ord1
  • rd1
  • d1
  • 1

antes de passar para a partida bem-sucedida (começando em word2).

Como você está interessado em encontrar palavras inteiras, você pode evitar todas as tentativas de correspondência de palavras intermediárias incluindo limites de palavras no padrão:

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

Outro efeito disso é evitar a correspondência 123quando ela aparece dentro de uma palavra mais longa.

Isso reduziu o tempo em um fator de 100 para mim (caso de teste: pesquisando a palavra 'eu' em Ulisses)

A seção "Armadilhas" dohttp://www.regular-expressions.info/examples.htmltem algumas boas dicas sobre o que torna os regexps lentos.

informação relacionada