在 /usr/include 中查找所有以元音开头的头文件

在 /usr/include 中查找所有以元音开头的头文件

我需要找到所有/usr/include以元音 (a,e,i,o,u) 开头的标题

例子:

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

我不知道该怎么做,我尝试用 grep 做一些事情,但没有成功。

答案1

有一个简单的方法,即使用ls命令:

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

您还可以使用带有以下选项的find命令:-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.

^\.\/[aeiou].*\.h$ 

^./[aeiou].*.h$

解释:

  • ^是文件名开始的锚点(或者更好的是文件路径的开始)
  • \.\/仅匹配./(一个点后跟一个斜杠)
  • (a|e|i|o|u)是匹配的组。将匹配从文件名开头的第一个之后的或a|ei或中的一个;或者您也可以只使用字符类。ou./[aeiou]
  • .*匹配元音单词后的任意字符
  • \.匹配单个点字符,并且
  • h$匹配h文件名末尾的字符($是文件名末尾的锚点)

答案2

GNU 版本find支持将基本文件名通配符作为-name模式的一部分,包括[...]字符集构造。因此,似乎您可以这样做

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

或者

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

如果您想不区分大小写地匹配。

答案3

这也很有用。在正则表达式的帮助下使用简单的“grep”......

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

有关 'grep' 给出的正则表达式(即 的含义'^[aeiou].*\.h$'),请参阅以下链接 正则表达式

相关内容