Em grep , seu padrão está combinando .h (qualquer caractere seguido por h ) em qualquer lugar da linha, não apenas no final.
Você basicamente tem dois problemas:
-
Quoting / problema de escape
-
Problema de padrão de expressão regular
Explicações:
-
Você escapou de
.usando\.e não usou nenhuma aspas ou outro\, portanto, o escape escaparia do shell egrepobteria o padrão Regex como.h, no termo Regex que significa qualquer caractere seguido por umh. Seu objetivo é fazer com quegreptrate o.literal, então você precisa citar ou adicionar outro\como:'\.h' \.h -
Agora, o segundo problema, em regex, o final de uma linha é expresso pelo quantificador
$, de modo que você precisa corresponder ao.hno final da linha:'\.h$'
Então, juntos, o uso correto seria:
ls /usr/include/ | grep '\.h$'
Agora, o mais importante, não analisar ls .
O que você está fazendo pode ser feito de forma fácil e eficiente por meio de globalização básica:
ls /usr/include/*.h