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 egrep
obteria o padrão Regex como.h
, no termo Regex que significa qualquer caractere seguido por umh
. Seu objetivo é fazer com quegrep
trate 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.h
no 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