Verwenden von Escape-Zeichen in Grep

9

Ich habe den folgenden regulären Ausdruck für die Eliminierung von Leerzeichen, Tabulatoren und neuen Zeilen: [^ \n\t]

Ich möchte dies jedoch für bestimmte zusätzliche Zeichen wie > und < erweitern.

Ich habe versucht, [^ \n\t<>] , das funktioniert jetzt gut, aber ich möchte den Ausdruck nicht übereinstimmen, wenn der < oder > eine \ vorangestellt ist.

Ich habe versucht, [^ \n\t[^\]<[^\]>] , aber das hat nicht funktioniert.

    
samoz 25.03.2009, 18:50
quelle

3 Antworten

4

Kann eine der folgenden Sequenzen in Ihrer Eingabe vorkommen?

  

\>
\\>
\\>
\ blank
\ tab
\ newline
  ...

Wenn ja, wie schlagen Sie vor, sie zu behandeln?

Wenn nicht, dann werden Lookback-Assertions mit einer Breite von null ausreichen, vorausgesetzt, dass Sie Ihren regulären Ausdruck verwenden Motor unterstützt es. Dies wird in jeder Engine der Fall sein, die reguläre Ausdrücke im Perl-Stil unterstützt (einschließlich Perls, PHP, etc.):

%Vor%

Der obige Text entspricht allen nicht-maskierten Leerzeichen, Zeilenumbrüchen, Tabulatoren oder gewinkelten Klammern. Allgemeiner (mit \s zur Angabe beliebiger Leerzeichen, einschließlich \r ):

%Vor%

Alternativ kann die komplementäre Notation verwendet werden, ohne dass eine Lookback-Anweisung mit einer Breite von null erforderlich ist (aber wohl weniger effizient):

%Vor%

Sie können auch eine Variante des letzteren verwenden, um die Fälle \> , \\> , \\> usw. auch bis zu einer endlichen Anzahl von vorhergehenden Backslashs zu behandeln, wie zum Beispiel:

%Vor%     
vladr 25.03.2009, 20:49
quelle
0

Laut der grep man-Seite :

  

Ein Klammerausdruck ist eine Liste von   Zeichen eingeschlossen von [und]. Es   passt auf jedes einzelne Zeichen in diesem   Liste; wenn das erste Zeichen des   Liste ist das Caret ^ dann stimmt es überein   ein beliebiges Zeichen, das nicht in der Liste enthalten ist.

Dies bedeutet, dass Sie keine Zeichenfolge wie \ & lt; oder \ & gt; nur einzelne Zeichen.

Es sei denn, Sie haben eine Version von grep mit Perl Regex-Unterstützung, dann können Sie Lookarounds wie eines der anderen erwähnten Poster verwenden. Nicht alle Versionen von grep haben diese Unterstützung.

    
Robert S. Barnes 25.03.2009 20:50
quelle
-1

Vielleicht können Sie egrep verwenden und Ihre Musterzeichenfolge in Anführungszeichen setzen. Dies sollte die Notwendigkeit der Flucht aus dem Weg räumen.

    
Yuval F 25.03.2009 19:18
quelle

Tags und Links