localizar todos os arquivos de cabeçalhos começam com vogais em / usr / include

-6

Eu preciso encontrar todos os cabeçalhos de /usr/include que começam com as vogais (a, e, i, o, u)

Exemplo:

acpi.h 
aclinux.h
ah.h 
...

Eu não sei como fazer isso, eu tentei algo com o grep, mas eu não inventei.

    
por xyz 11.01.2015 / 16:19

3 respostas

9

Existe uma maneira simples de usar o comando ls :

ls /usr/include/[aeiou]*\.h

Mas você também pode usar o comando find com regex:

find /usr/include -type f -regextype "posix-extended" -iregex '^\.\/(a|e|i|o|u).*\.h$'
-regex pattern
    File  name matches regular expression pattern.  This is a match on the whole path, not a search.  For
    example, to match a file named './fubar3', you can use the regular expression '\.\/fub.*'  or '.*b.*3' or '.*bar.',
    but not 'f.*r3'. The regular expressions understood by find are by default Emacs Regular Expres‐
    sions, but this can be changed with the -regextype option.

-iregex pattern
    Like -regex, but the match is case insensitive.

-regextype type
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the
    command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic,
    posix-egrep and posix-extended.
^\.\/(a|e|i|o|u).*\.h$

Explicação:

  • ^ é âncora para o início do nome do arquivo (ou melhor iniciar o caminho do arquivo)
  • \.\/ corresponde apenas a ./ (um único ponto seguido por uma barra)
  • (a|e|i|o|u) é o grupo de correspondência. corresponderá a um dos a ou ( | ) e , i , o ou u do início do nome do arquivo após o primeiro ./
  • .* corresponde a qualquer caractere após palavras de vogais
  • \. corresponde a um único caractere de ponto e
  • h$ corresponde ao caractere h no final do nome do arquivo (O $ é a âncora para o final do nome do arquivo)
por devWeek 11.01.2015 / 16:36
3

A versão GNU de find suporta globs básicos de nomes de arquivos como parte do padrão -name , incluindo a construção do conjunto de caracteres [...] . Então parece que você pode apenas fazer

find /usr/include -name '[aeiou]*\.h'

ou

find /usr/include -iname '[aeiou]*\.h'

se você quiser combinar insensível a maiúsculas e minúsculas.

    
por steeldriver 11.01.2015 / 17:23
2

Isso também é útil. Use "grep" simples com a ajuda da expressão regular.

ls /usr/include/ | grep '^[aeiou].*\.h$'

Para as expressões regulares dadas com 'grep' (ou seja, o significado de '^[aeiou].*\.h$' ), consulte o link a seguir Expressão Regular

    
por saptarshi nag 11.01.2015 / 17:22