在目录中搜索具有固定名称模式的文件

时间:2017-11-09 21:28:14

标签: bash shell unix grep ls

我想搜索一个目录(让我们称之为" testDir")来查找名称以字母开头的文件" a",有字母" z& #34;在第四个位置,他们的文件扩展名是.html。

有没有办法使用grep?如何在固定索引处搜索字符?

2 个答案:

答案 0 :(得分:1)

您可以使用本机Bash模式匹配:a??z*.html。这种模式正是您所要求的:

  • 以字母“a”开头
  • 后跟任意两个字符
  • 后跟字母“z”(第4位)
  • 后跟0个或更多字符
  • 以“.html”结尾

您可以使用任何shell工具获取匹配的文件名,该工具在作为参数传递时打印文件名。 一些例子:

  • ls testDir/a??z*.htmlecho 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 $'