2017-09-13 4 views
-1

Von einer Linux-Befehlszeile möchte ich alle Instanzen in mehreren Dateien finden, wo ich keine Referenz auf eine Abbildung mit Fig. verweisen.Regex/grep Übereinstimmung auf: "nicht das" und "das"

Also ich suche jede Zeile für wenn ich \ref{fig mit genau Fig. nicht vorstelle.

  1. Fig. \ref{fig:myFigure}
  2. A sentence with Fig. \ref{fig:myFigure} there.
  3. \ref{fig:myFigure}
  4. A sentence with \ref{fig:myFigure} there.

Die regex sollte Fällen (1) und (2) ignorieren, aber Hüllen (3) und (4).

+1

Was Zeilenumbrüchen zwischen 'Fig.' und' \ ref'? –

+0

@BenjaminW. - Ja das ist eine Möglichkeit. Ich habe es aus dem ursprünglichen Beitrag weggelassen, um mich auf die Regex zu konzentrieren, die für ein "nicht das" und "das" benötigt wird. Der optionale Zeilenumbruch wird nicht schwer hinzuzufügen sein. –

+0

Der optionale Zeilenumbruch macht einen großen Unterschied, da grep Dateien Zeile für Zeile betrachtet. Wenn Sie angeben, dass anstelle von Zeilenumbruch ein anderes Zeichen wie das Nullzeichen verwendet werden soll, gibt eine Übereinstimmung die gesamte Datei zurück, da sie als einzelne Zeile betrachtet wird. –

Antwort

1

Sie können wie negative Vorschau verwenden:

^((?!Fig\. {0,1}\\ref\{fig).)*$ 

https://regex101.com/r/wSw9iI/2

Negative Lookahead (?!Fig\.\s*\\ref\{fig) 
Assert that the Regex below does not match 
Fig matches the characters Fig literally (case sensitive) 
\. matches the character . literally (case sensitive) 
\s* matches any whitespace character (equal to [\r\n\t\f\v ]) 
* Quantifier — Matches between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
\\ matches the character \ literally (case sensitive) 
ref matches the characters ref literally (case sensitive) 
\{ matches the character { literally (case sensitive) 
fig matches the characters fig literally (case sensitive) 
Verwandte Themen