Wie findet man Übereinstimmungen mit umgebenden Wörtern?

Wie findet man Übereinstimmungen mit umgebenden Wörtern?

Ich möchte Übereinstimmungen mit den umgebenden Wörtern finden.Ich möchte auch, dass es schnell geht.

Hier ist, was ich habe:

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

n ist die Anzahl der Wörter vor der Phrase, m ist die Anzahl der Wörter nach der Phrase. Die Übereinstimmung ist die Phrase, nach der ich suche.

Gibt es einen schnelleren Weg, das zu tun?

Beispiel:

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

=> word2 word3 123 word4 word5.

Antwort1

(\w+ )wird mit einem Wort oder einem Wortteil übereinstimmen. Das bedeutet, dass grepjedes Zeichen in jedem Wort als potenzieller Anfangszeichen einer Übereinstimmung behandelt wird. In Ihrem Beispiel wird jedes

  • word1
  • ord1
  • rd1
  • d1
  • 1

bevor es weiter zum erfolgreichen Match geht (beginnend bei word2).

Da Sie daran interessiert sind, ganze Wörter zu finden, können Sie alle versuchten Übereinstimmungen mitten im Wort verhindern, indem Sie Wortgrenzen in das Muster einbeziehen:

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

Ein weiterer Effekt besteht darin, dass eine Übereinstimmung verhindert wird 123, wenn es innerhalb eines längeren Wortes erscheint.

Dies hat bei mir die Zeit um den Faktor 100 verkürzt (Testfall: Suche nach dem Wort „ich“ in Ulysses)

Der Abschnitt "Fallstricke" vonhttp://www.regular-expressions.info/examples.htmlenthält einige gute Hinweise dazu, was reguläre Ausdrücke verlangsamen.

verwandte Informationen