L'expression grep suivante répertorie avec succès tous les fichiers .exe et .html du répertoire et des sous-répertoires actuels.
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
Comment inverser ce résultat pour répertorier ceux qui ne sont pas à la place .html ou .exe. (C'est-à-dire !=
.)
-v
/--invert-match
ne retournera pas nécessairement si le code de retourgrep
indique une exécution réussie, mais correspondra plutôt aux lignes qui autrement ne seraient pas mises en correspondance. Ceux qui cherchent à inverser le code retour (c'est-à-dire réussir si toutes les lignes ne correspondent pas au modèle, plutôt qu'au moins un) devraient utiliser! grep
. Ceci trouve utilisation dans des expressions conditionnelles, par exemple:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.ou
Vous pouvez également faire la même chose en utilisant
find
:Plus d'infos ici .
la source
find
commande est la solution la plus sémantique à ce problème XY. La combinaisonls
etgrep
à cette fin semble au mieux hacky. Ce devrait être la réponse acceptée. (+1)Ajoutez l'
-v
option à votregrep
commande pour inverser les résultats.la source
la source
Comme indiqué plusieurs fois, l'inversion est obtenue par l'
-v
option togrep
. Permettez-moi d'ajouter la note (j'espère amusante) que vous auriez pu comprendre cela vous-même en parcourant legrep
texte d'aide:la source