Sind Sie sicher, dass das, was Sie wollen, passiert? Wenn Sie rennen ls /directory | grep '[^term]'
, suchen Sie im Wesentlichen nicht nach den Buchstaben ter m. Das heißt, wenn eine Datei andere Buchstaben im Namen hat, wird sie weiterhin in der Ausgabe von angezeigt ls
. Nehmen Sie zum Beispiel das folgende Verzeichnis:
$ ls
alpha brave bravo charlie delta
Wenn ich jetzt renne, ls |grep '^[brav]'
bekomme ich folgendes:
$ ls |grep '^[brav]'
alpha
brave
bravo
Wie Sie sehen können, nicht nur ich brave
und bravo
ich habe auch , alpha
weil die Zeichenklasse []
jeden Buchstaben aus dieser Liste erhalten.
Wenn ich folge ls |grep '[^brav]'
, bekomme ich folglich alle Dateien, die die Zeichen brav irgendwo im Namen enthalten.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
Wenn Sie bemerken, dass es die gesamte Verzeichnisliste enthält, weil alle Dateien mindestens einen Buchstaben hatten, der nicht in der Zeichenklasse enthalten war.
Also, wie Kanvuanza sagte, um nach der Umkehrung von "Begriff" zu suchen, im Gegensatz zu den Zeichen, die t e r m
Sie verwenden sollten grep -v
.
Zum Beispiel:
$ ls |grep -v 'brav'
alpha
charlie
delta
Auch wenn Sie nicht möchten, dass Dateien mit Zeichen in der Klasse verwendet werden grep -v '[term]'
. Dadurch wird verhindert, dass Dateien mit einem dieser Zeichen angezeigt werden. (Kanvuanzas Antwort)
Zum Beispiel:
$ ls |grep -v '[brav]'
Wie Sie sehen, wurden keine Dateien aufgelistet, da alle Dateien in diesem Verzeichnis mindestens einen Buchstaben aus dieser Klasse enthielten.
Nachtrag:
Ich wollte hinzufügen, dass es mit PCRE möglich ist, nur Regex zu verwenden, um mit negativen Ausdrücken herauszufiltern. Um dies zu tun, würden Sie etwas verwenden, das als negative Vorausschau-Regex bekannt ist : (?!<regex>)
.
Mit dem obigen Beispiel können Sie so etwas tun, um die gewünschten Ergebnisse zu erzielen, ohne grep
Flags zu verwenden.
$ ls | grep -P '^(?!brav)'
alpha
charlie
delta
Um diesen regulären Ausdruck zu dekonstruieren, stimmt er zuerst am Anfang einer Zeile ^
überein und sucht dann nach Zeichenfolgen, die nicht übereinstimmen brav
, um anschließend zu folgen. Nur alpha
,, charlie
und delta
übereinstimmen, damit nur diese gedruckt werden.
grep
Zeilen beginnen mit Begriff. Oder möchten Sie nach Zeilen suchen, die überhaupt keinen Begriff enthalten?