Sei sicuro che ciò che desideri stia accadendo? Quando esegui ls /directory | grep '[^term]' stai essenzialmente grepping per non le lettere t e r m. Questo significa che se un file ha altre lettere nel suo nome apparirà comunque nell'output di ls . Prendi ad esempio la seguente directory:
$ ls
alpha  brave  bravo  charlie  delta
 
 Ora se eseguo ls |grep '^[brav]' Ottengo quanto segue:
$ ls |grep '^[brav]'
alpha
brave
bravo
 
 Come puoi vedere, non solo ho ottenuto brave e bravo Ho anche ricevuto alpha perché la classe di caratteri [] riceverà qualsiasi lettera da quella lista.
 Di conseguenza, se eseguo ls |grep '[^brav]' Otterrò tutti i file che non contengono i caratteri b r a v ovunque nel nome.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
 Se noti che includeva l'intero elenco di directory perché tutti i file ne avevano almeno uno lettera che non era inclusa nella classe di caratteri.
 Quindi, come ha detto Kanvuanza, grep per l'inverso di "termine" rispetto ai caratteri t e r m dovresti farlo usando grep -v .
Ad esempio:
$ ls |grep -v 'brav'
alpha
charlie
delta
 
 Inoltre, se non vuoi che i file contengano caratteri nella classe, usa grep -v '[term]' . Ciò impedirà la visualizzazione di qualsiasi file che abbia uno di quei caratteri. (risposta di Kanvuanza)
Ad esempio:
$ ls |grep -v '[brav]'
 Come puoi vedere non c'erano file elencati perché tutti i file in questa directory includevano almeno una lettera di quella classe.
Appendice:
 Volevo aggiungere che usando PCRE è possibile usare solo regex per filtrare usando espressioni negate. Per fare questo useresti qualcosa noto come regex look-ahead negativo:(?!<regex>) .
 Quindi, usando l'esempio sopra, puoi fare qualcosa di simile per ottenere i risultati desiderati senza usare grep flag.
$ ls | grep -P '^(?!brav)'
alpha
charlie
delta
 
 Per decostruire quella regex, prima corrisponde all'inizio di una riga ^ e quindi cerca le stringhe che non corrispondono a brav da seguire dopo. Solo alpha , charlie e delta match quindi quelli sono gli unici che vengono stampati.
 Immagino che grep -v flag fa quello che vuoi. Dalla pagina man:
-v, --invert-match
    Invert the sense of matching, to select non-matching lines.
 
 Puoi usare ls /directory | grep -v [term] per stampare tutte le righe non corrispondenti.