Êtes-vous sûr que ce que vous voulez se passe? Lorsque vous courez, ls /directory | grep '[^term]'
vous ne cherchez pas essentiellement les lettres ter m. Cela signifie que si un fichier a d'autres lettres dans son nom, il apparaîtra toujours dans la sortie de ls
. Prenez par exemple le répertoire suivant:
$ ls
alpha brave bravo charlie delta
Maintenant, si je cours, ls |grep '^[brav]'
j'obtiens ce qui suit:
$ ls |grep '^[brav]'
alpha
brave
bravo
Comme vous pouvez le voir, non seulement j'ai reçu brave
et bravo
j'ai aussi obtenu alpha
parce que la classe de personnage []
recevra n'importe quelle lettre de cette liste.
Par conséquent, si je lance ls |grep '[^brav]'
, j'obtiendrai tous les fichiers qui ne contiennent pas les caractères brav n'importe où dans le nom.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
Si vous remarquez qu'il comprenait la liste complète des répertoires car tous les fichiers avaient au moins une lettre qui n'était pas incluse dans la classe de caractères.
Donc, comme Kanvuanza l'a dit, pour rechercher l'inverse de "terme" par opposition aux caractères, t e r m
vous devez le faire en utilisant grep -v
.
Par exemple:
$ ls |grep -v 'brav'
alpha
charlie
delta
Aussi, si vous ne voulez pas que les fichiers contenant des caractères dans la classe soient utilisés grep -v '[term]'
. Cela empêchera l'apparition de tous les fichiers contenant l'un de ces caractères. (Réponse de Kanvuanza)
Par exemple:
$ ls |grep -v '[brav]'
Comme vous pouvez le voir, aucun fichier n'était répertorié car tous les fichiers de ce répertoire comprenaient au moins une lettre de cette classe.
Addenda:
Je voulais ajouter qu'en utilisant PCRE, il est possible d'utiliser simplement des expressions rationnelles pour filtrer en utilisant des expressions négatives. Pour ce faire , vous utilisez quelque chose de connu comme anticipation négative regex: (?!<regex>)
.
Donc, en utilisant l'exemple ci-dessus, vous pouvez faire quelque chose comme ça pour obtenir les résultats souhaités sans utiliser de grep
drapeaux.
$ ls | grep -P '^(?!brav)'
alpha
charlie
delta
Pour déconstruire cette expression régulière, elle correspond d'abord au début d'une ligne ^
, puis recherche les chaînes qui ne correspondent pas brav
à suivre ensuite. Seulement alpha
, charlie
et delta
correspondent donc ce sont les seuls qui sont imprimés.
grep
lignes commençant par un terme. Ou voulez-vous chercher des lignes ne contenant pas du tout de terme?