!=
é apenas uma comparação de cadeia (ou comparação de número, dependendo do que está sendo comparado) operador. Para comparação de string ( A != B
), dependendo da implementação de awk
, é uma comparação byte a byte ou para alguns (conforme exigido pelo POSIX), é a abreviação de A < B || A > B
, que é A != B
testes se A
e B
ordenam de forma diferente.
Em qualquer caso, não é um operador de correspondência de padrões. Para isso, você tem o operador ~
(negado com !~
), embora seja para correspondência de expressão regular, não para correspondência de padrão curinga. Você precisaria:
ls -la | awk '$1 !~ /^d/'
Embora aqui você também possa usar:
ls -la | grep -v '^d'
Com $1 != "d*"
, isso retornaria verdadeiro para qualquer coisa, exceto um primeiro campo que é (ou ordena o mesmo que com awk
implementaions) d*
. d*
como um regexp corresponde a qualquer número (incluindo 0) de d
, portanto, $1 !~ "d*"
sempre retornará false
, pois qualquer string conteria no mínimo 0 d
s.