首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配某个位置的文件名中有0000的文件。

匹配某个位置的文件名中有0000的文件。
EN

Stack Overflow用户
提问于 2018-07-11 14:25:04
回答 2查看 34关注 0票数 1

我有几百份这样的文件:

代码语言:javascript
运行
复制
201670000_FOR1.xml
201670000_GAL0.xml
201670000_GAL1.xml
20184301_2.xml
20184301_3.xml
20184301_4.xml

我需要匹配在位置6-9有0000的所有文件.前3个文件应该匹配,底部3个不匹配。我试过:

代码语言:javascript
运行
复制
find -E . -regex '/^.{6}0000*/' | wc -l

但没有产生任何结果。正确的正则表达式会是什么样子?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-11 14:29:10

您可以使用这个find正则表达式:

代码语言:javascript
运行
复制
find -E . -regex '.*/.{5}0{4}.*'

代码语言:javascript
运行
复制
./201670000_GAL0.xml
./201670000_FOR1.xml
./201670000_GAL1.xml

Regex详细信息:

  • .*/之前匹配文件名的一部分
  • .{5}匹配/后的前5个字符
  • 然后使用0{4}匹配4个零
  • 最后,对剩余字符进行.*

您还可以使用此glob模式来避免正则表达式。

代码语言:javascript
运行
复制
find . -name '?????0000*'
票数 1
EN

Stack Overflow用户

发布于 2018-07-11 14:29:03

斜杠不能是文件名的一部分。把他们干掉。(有些工具确实需要斜线作为正则表达式周围的分隔符,但find绝对不是其中之一。)

您的示例在零之前都有5个字符,而不是6个,而0*只匹配零,不匹配零后面跟着任何东西(即0.*),因此您可能需要^.{5}0{4}.*

更经济,更简洁,

代码语言:javascript
运行
复制
wc -l ?????0000*

匹配当前目录中具有此模式的所有文件,以及

代码语言:javascript
运行
复制
wc -l **/?????0000*

在许多shell中,递归检查所有子目录(但**不能正确地移植到POSIX sh)。

从您的问题中还不清楚是否要检查子目录,但是find也总是检查子目录,除非您特别告诉它不要检查子目录。在具有许多子目录的树上,这可能会在性能上产生显著差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51288018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档