Sei sicuro di quello che vuoi che accada? Quando corri, ls /directory | grep '[^term]'stai essenzialmente prendendo in giro non le lettere. Ciò 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 corro ls |grep '^[brav]'ottengo il seguente:
$ ls |grep '^[brav]'
alpha
brave
bravo
Come puoi vedere, non solo ho avuto bravee bravoho anche alphaperché la classe di personaggi []riceverà qualsiasi lettera da quella lista.
Di conseguenza, se corro, ls |grep '[^brav]'otterrò tutti i file che non contengono i caratteri brav in qualsiasi parte del nome.
$ ls |grep '[^brav]'
alpha
bravo
brave
charlie
delta
Se noti che includeva l'intero elenco di directory perché tutti i file avevano almeno una lettera che non era inclusa nella classe di caratteri.
Quindi, come ha detto Kanvuanza, per invocare l'inverso del "termine" in contrapposizione ai personaggi t e r mche dovresti fare usando grep -v.
Per esempio:
$ ls |grep -v 'brav'
alpha
charlie
delta
Inoltre, se non desideri utilizzare i file che contengono caratteri nella classe grep -v '[term]'. Ciò impedirà la visualizzazione di qualsiasi file con uno di questi caratteri. (La risposta di Kanvuanza)
Per 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.
Addendum:
Volevo aggiungere che usando PCRE è possibile usare solo regex per filtrare usando espressioni negative. Per fare questo si può usare qualcosa di noto come un fatto negativo look-ahead regex: (?!<regex>).
Quindi, usando l'esempio sopra, puoi fare qualcosa del genere per ottenere i risultati desiderati senza usare le grepbandiere.
$ 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 bravda seguire in seguito. Solo alpha, charliee deltaabbina in modo che quelli siano gli unici stampati.
greplinee che iniziano con il termine. Oppure vuoi grep per le linee che non contengono affatto un termine?