我想搜索一个目录(让我们称之为" testDir")来查找名称以字母开头的文件" a",有字母" z& #34;在第四个位置,他们的文件扩展名是.html。
有没有办法使用grep
?如何在固定索引处搜索字符?
答案 0 :(得分:1)
您可以使用本机Bash模式匹配:a??z*.html
。这种模式正是您所要求的:
您可以使用任何shell工具获取匹配的文件名,该工具在作为参数传递时打印文件名。 一些例子:
ls testDir/a??z*.html
或echo testDir/a??z*.html
。请注意,这些将使用testDir/
前缀打印。(cd testDir && echo a??z*.html)
将仅打印没有testDir/
前缀的文件名。ls
命令在没有匹配文件时会产生错误,而echo
命令会打印模式(a??z*.html
)。有关模式匹配的更多详细信息,请参阅man bash
中的模式匹配部分。
如果您正在寻找在没有匹配项时不产生输出的替代方法,grep
将更容易使用,但grep
使用不同的语法来匹配模式,它使用正则表达式。
用正则表达式编写的相同模式是^a..z.*\.html$
。
这分解为:
^
表示行首,因此^a
表示以“a”开头.
是任何字符,恰好是一个.*
是0或更多任何字符\.
是“。”$
表示行尾,因此html$
表示以“html”结尾以下是将其应用于您的示例的一种方法:
(cd testDir && ls | grep '^a..z.*\.html$')
答案 1 :(得分:0)
这个怎么样:
ls -d testDir / a ?? z * | grep -e'.html $'