Ich möchte alle Instanzen von "index", nicht gefolgt von .php, in einem Protokoll mit finden less
. /index(?!\.php)
funktioniert nicht. Ist das möglich? Was ist der reguläre Ausdruck für weniger und vim (unterscheiden sie sich?). Ist dies mit den jeweiligen Regex-Bibliotheken dieser Anwendung nicht möglich?
vim
regular-expression
less
Gregg Leventhal
quelle
quelle
Antworten:
In
vim
können Sie dies tun:Versuchen Sie für weitere Informationen im Befehlsmodus Folgendes
:h \@
:quelle
\@<!
\(some\)\@<!thing
Wird mitthing
undeverything
und übereinstimmennothing
, aber nichtsomething
.(?!\.php)
ist ein Perl-Regexp-Operator.less
verwendet in der Regel, POSIX regexp API des Systems so typisch GNU erweiterte reguläre Ausdrücke auf einem GNU - System,vim
verwendetvim
reguläre Ausdrücke.In
vim
, wie bereits durch cuonglm gezeigt, das äquivalentindex(?!\.php)
wäreindex\(\.php\)\@!
oder\vindex(\.php)@!
.Zum
less
Zeitpunkt der Kompilierung können Sie die Regex-Bibliothek / API und als Ergebnis den zu verwendenden Regex-Typ auswählen:Standardmäßig
less
wird jedoch POSIXregcomp
mit REG_EXTENDED verwendet, sodass Sie die erweiterten regulären Ausdrücke Ihres Systems erhalten, also normalerweise etwas Ähnliches wie mitgrep -E
.In GNU Extended Regexp gibt es keinen vergleichbaren Look-Behind- oder Look-Ahead-Operator.
Sie könnten es auf die harte Tour machen:
Mit
less
könnten Sie möglicherweise die&
Taste verwenden, um die Zeilen herauszufiltern, dieindex.php
(&!index\.php
) enthalten, und dann nachindex
(/index
) zu suchen . (Sie würden immer noch die anderen Instanzen vermissenindex
, die in einer Zeile mit enthalten sindindex.php
).quelle
less
verwendet wird, von der kompilierten Zeit abhängt.less
verwendet werden,PCRE
indem wir die Ausgabe von analysierenldd $(which less)
. Aber wissen Sie bei einer anderen Bibliothek, wie Sie das überprüfen können?less --version
.less --verion
, druckt es nurless 444
zusammen mit Copyright.