我需要找到所有/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$
解释:
^
是文件名开始的锚点(或者更好的是文件路径的开始)\.\/
仅匹配./
(一个点后跟一个斜杠)(a|e|i|o|u)
是匹配的组。将匹配从文件名开头的第一个之后的或a
(|
)e
、i
或中的一个;或者您也可以只使用字符类。o
u
./
[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$'
),请参阅以下链接
正则表达式