【发布时间】:2014-02-15 01:44:40
【问题描述】:
我不确定我是否在 bash 中正确使用了正则表达式。我在使用 bash shell 的 Centos 系统上。在我们的日志目录中,有附加数字的日志文件,即
stream.log
stream.log.1
stream.log.2
...
stream.log.nnn
不幸的是,还有使用新命名约定的日志文件,
stream.log.2014-02-14
stream.log.2014-02-13
我需要使用旧的日志文件命名格式获取文件。我找到了一些可行的方法,但我想知道是否有另一种更优雅的方法来做到这一点。
ls -v stream.log* | grep -v 2014
我不知道正则表达式在 bash 中的工作原理和/或将输出传送到的命令(可能是 grep 除外)。我想到的 cmd/regex 是这样的:
ls -v stream.log(\.\d{0,2})+
毫不奇怪,这不起作用。也许我的逻辑不正确,但我想从名为 stream.log 的 cmdline 列表文件中说,末尾有一个可选的 .xyz,其中最后附加了 xyz={1..999}。请让我知道这是否可行,或者我想出的解决方案是否是执行此类操作的唯一方法。提前感谢您的帮助。
编辑:感谢大家的及时和回复。我只是想提出还有一个名为stream.log 的文件,它没有附加任何数字,也需要将其放入我的ls 列表中。我尝试了评论和答案中的提示,它们有效,但它忽略了该文件。
【问题讨论】:
-
ls *[0-9]|grep -v '-[0-9]{2}$'或类似的东西。获取所有以数字结尾的文件,然后排除以-digitdigit结尾的文件 -
@MarcB,感谢您的快速回复。有没有办法得到一个最后没有数字的文件?有一个文件stream.log最后没有数字,但所有其他文件都是stream.log.1,stream.log.nnn。另外,如果您将评论变成答案,我可以投票。
-
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。