Der folgende grep-Ausdruck listet erfolgreich alle EXE- und HTML-Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen auf.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
Wie invertiere ich dieses Ergebnis, um diejenigen aufzulisten, die stattdessen keine .html- oder .exe-Datei sind? (Das heißt , !=
.)
-v
/--invert-match
nicht unbedingt umdreht, ob der Rückkehrcode vongrep
eine erfolgreiche Ausführung anzeigt, sondern stattdessen mit den Zeilen übereinstimmt, die sonst nicht übereinstimmen würden. Diejenigen, die den Rückkehrcode invertieren möchten (dh erfolgreich sind, wenn nicht alle Zeilen mit dem Muster übereinstimmen, sondern mindestens eine), sollten verwenden! grep
. Dies findet Verwendung in bedingten Ausdrücken, zif ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.oder
Sie können dasselbe auch tun mit
find
:Mehr Infos hier .
quelle
find
Befehl ist die semantischste Lösung für dieses XY-Problem. Kombinierenls
undgrep
zu diesem Zweck scheint bestenfalls hacky. Dies sollte die akzeptierte Antwort sein. (+1)Fügen Sie
-v
Ihremgrep
Befehl die Option hinzu, um die Ergebnisse umzukehren.quelle
quelle
Wie mehrfach angegeben, wird die Inversion durch die
-v
Option erreichtgrep
. Lassen Sie mich den (hoffentlich amüsanten) Hinweis hinzufügen, dass Sie dies selbst hätten herausfinden können, indem Sie den Hilfetext durchgesehen habengrep
:quelle