【发布时间】:2016-08-13 03:23:09
【问题描述】:
我希望能够遍历与特定模式匹配的文件列表。我可以让 unix 使用带有正则表达式的 ls 和 egrep 列出这些文件,但是我找不到将其转变为迭代过程的方法。我怀疑使用 ls 不是答案。任何帮助将不胜感激。
我当前的 ls 命令如下所示:
ls | egrep -i 'MYFILE[0-9][0-9]([0][1-9]|1[0-2])([0][1-9]|[12][0-9]|[3][01]).dat'
我希望以上匹配:
- MYFILE160418.dat
- myFILE170312.DAT
- MyFile160416.DaT
但不是:
- MYOTHERFILE150202.DAT
- 我的文件.dat
- myfile.csv
谢谢,
保罗。
【问题讨论】:
-
嗨@paul-frith,您应该以
while或for开头。使用示例中的计数器 -> tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html -
在许多情况下,您不需要显式循环,因为您可以通过管道将参数传递给另一个程序,可能使用
xargs。 -
非常感谢 - 我没有意识到你可以在 for 循环中使用 ls。
-
试试:
ls | egrep -i 'MYFILE\d{6}\.dat' -
Saleem,虽然更简洁,但我相信这会给出更宽松的匹配标准,使用您的方法将允许大于 12 的月份和大于 31 的日期。