我有几百份这样的文件:
201670000_FOR1.xml
201670000_GAL0.xml
201670000_GAL1.xml
20184301_2.xml
20184301_3.xml
20184301_4.xml我需要匹配在位置6-9有0000的所有文件.前3个文件应该匹配,底部3个不匹配。我试过:
find -E . -regex '/^.{6}0000*/' | wc -l但没有产生任何结果。正确的正则表达式会是什么样子?
发布于 2018-07-11 14:29:10
您可以使用这个find正则表达式:
find -E . -regex '.*/.{5}0{4}.*'
./201670000_GAL0.xml
./201670000_FOR1.xml
./201670000_GAL1.xmlRegex详细信息:
.*在/之前匹配文件名的一部分.{5}匹配/后的前5个字符0{4}匹配4个零.*。您还可以使用此glob模式来避免正则表达式。
find . -name '?????0000*'发布于 2018-07-11 14:29:03
斜杠不能是文件名的一部分。把他们干掉。(有些工具确实需要斜线作为正则表达式周围的分隔符,但find绝对不是其中之一。)
您的示例在零之前都有5个字符,而不是6个,而0*只匹配零,不匹配零后面跟着任何东西(即0.*),因此您可能需要^.{5}0{4}.*。
更经济,更简洁,
wc -l ?????0000*匹配当前目录中具有此模式的所有文件,以及
wc -l **/?????0000*在许多shell中,递归检查所有子目录(但**不能正确地移植到POSIX sh)。
从您的问题中还不清楚是否要检查子目录,但是find也总是检查子目录,除非您特别告诉它不要检查子目录。在具有许多子目录的树上,这可能会在性能上产生显著差异。
https://stackoverflow.com/questions/51288018
复制相似问题