2017-03-08 1 views
0

Ich habe versucht, das folgende Muster in einem Protokoll zu suchen.Vim mehrzeilige Suche mit negativem Lookahead

[write_<many other characters here till end of line> 
<10-15 lines here> 
<more characters> 10008 

Mein Protokoll hat viele solche Vorkommnisse mit dem letzten Wert nicht 10008 Erste sein habe ich versucht, dies wie folgt gesucht:

/\[write_\_.\{-}10008 

Dies wurde passend [WRITE_ von einigen Linien viel vor dem nächsten [write_ to 10008. Aus diesem Grund wurde versucht, solche falschen Übereinstimmungen mit negativem Lookahead herauszufiltern.

/\[write_\_.\{-}10008\([write_\)\@! 

Dies funktionierte auch nicht für mich. Wo bin ich falsch gelaufen, oder denke ich in völlig falsche Richtung? Danke für jede Hilfe.

Antwort

1

Ich denke, das ist das, was Sie suchen:

/\v\[write_(\_.(\[write_)@!){-}10008 

Sie stellen den negativen Vorgriff in falscher Stelle.

+0

Danke für die Antwort. Ich habe es versucht, aber "E363: pattern verwendet mehr Speicher als 'maxmempfen' Interrupted". Ich verstehe nicht, was das bedeutet. Können Sie bitte helfen, diesen Wert angemessen einzustellen? – thorondor1990

+0

Wenn Sie den 'E363'-Fehler mit Kents Muster erhalten, dann kann Ihre Datei große Teile enthalten (etwas mehr als ~ 1000 Zeilen) ohne irgendeinen '[write_'-Header, nehme ich an; (Ich wollte es korrigieren, aber leider kann ich nicht das richtige Muster finden ..) – yolenoyer

+0

@ thorondor1990 Ich habe mit einigen Beispielen getestet, es hat funktioniert. Aber wie sieht deine echte Datei aus? Ich weiß es nicht. Wenn Sie 'E363' hatten, versuchen Sie bitte': set maxmpattern = A_BIG_NUMBER' – Kent