gpt4 book ai didi

regex - 如何使用 ls 列出以数字结尾的文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:46 24 4
gpt4 key购买 nike

我不确定我是否在 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})+

毫不奇怪,这没有用。也许我的逻辑不正确,但我想从 cmdline 列表文件中说出名称为 stream.log 的末尾带有可选的 .xyz,其中 xyz={1..999} 附加在末尾。请让我知道这是否可行,或者我提出的解决方案是否是执行此类操作的唯一方法。预先感谢您的帮助。

编辑:感谢大家的及时评论和回复。我只是想提出还有一个名为 stream.log 的文件,它没有附加任何数字,但也需要将其添加到我的 ls 列表中。我尝试了评论和回答中的提示,它们有效,但它遗漏了该文件。

最佳答案

您可以使用 中的扩展模式匹配来做到这一点,例如

> shopt -s extglob
> ls *'.'+([0-9])

在哪里

+(pattern-list)
Matches one or more occurrences of the given patterns

和其他有用的语法。

?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns

或者在没有扩展模式匹配的情况下可以使用不太简洁的解决方案

ls *'.'{1..1000} 2>dev/null

如果您有很多日志文件,请将 1000 替换为更大的数字。虽然我更喜欢 选择这个。

关于regex - 如何使用 ls 列出以数字结尾的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21792385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com