grep backslash im negativen lookbehind
Möchte ich die Anzahl der vorkommen von XXX
in mein latex-Dokument, das nicht in der form eines Befehls als \XXX
. Deshalb bin ich auf der Suche für Ereignisse, die nicht mit einem vorangestellten backslash.
Ich habe versucht, die folgenden:
grep -c -e '(?<!\)XXX' test.tex #result: grep: Unmatched ) or \)
grep -c -e '(?<!\\)XXX' test.tex #result: 0
grep -c -e "(?<!\\)XXX" test.tex #result: -bash: !\\: event not found
keiner von Ihnen arbeiten, wie beabsichtigt. In der Tat verstehe ich nicht, die Letzte Fehlermeldung überhaupt.
Meinem test.tex enthält nur die folgenden Zeilen
%test.tex
XXX
\XXX
Also das erwartete Ergebnis ist 1
.
Irgendwelche Ideen?
Ps.: Ich arbeite in der bash.
- Zur info, in deinem letzten Beispiel, der ! in doppelten Anführungszeichen interpretiert werden als eine Geschichte der expansion, aber '!\\' ist keine gültige Geschichte expansion Ausdruck.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weder die standard-noch die erweiterten regulären Ausdrücke unterstützen die Blick hinter. Verwenden Perl-regexes:
XXX
für\\XXX
und für(?<!\\)XXX
. Die erste gab 39, der zweite 10 und der Letzte 34. Diese zahlen nicht addieren, also etwas nicht so funktioniert wie ich es erwartet habe. Dies kann aber über meine erste Frage.Versuchen,
Wenn Sie GNU grep, es sollte Unterstützung für Perl-kompatible reguläre Ausdrücke, mit --perl-regexp-oder -P-Befehlszeilenoption. Die klassischen regulären perl-Ausdruck nur unterstützen negierten Zeichenklassen, z.B. [^a] bedeutet alle Zeichen außer "a".
Die Beispiele, die Sie gab, zu schauen, wie Perl-kompatible reguläre Ausdrücke, nicht-Klassik, und verwenden Sie die GNU-grep-mit --perl-regexp-oder -P-Befehlszeilenoption oder Sie installieren können, PCRE aktiviert grep, z.B. "Xen" - es braucht keine Befehlszeilenoptionen für PCRE, und somit bequemer ist.
Du auch, das Muster sieht nicht wie eine negative Behauptung. Es sollte
nicht die
Finden Sie hier mehr: https://perldoc.perl.org/perlre.html
Wenn Sie, wie perl-kompatible reguläre Ausdrücke und perl, aber nicht über Xen oder dein grep nicht unterstützt --perl-regexp-Sie können Sie einzeilige perl-Skripts, die die gleiche Weise arbeiten wie grep. Perl stdin akzeptiert die gleiche Weise wie grep, z.B.