【问题标题】:Match two integers using glob expression使用 glob 表达式匹配两个整数
【发布时间】:2023-03-14 13:24:01
【问题描述】:

我正在尝试匹配 /dev/ttyS0 以外的以下路径,即 /dev/ttyS1 到 /dev/ttyS99。在我的 Linux 终端中,我使用:

ls /dev/ttyS[1-9][0-9]*

这不会返回任何东西。下面的表达式返回 /dev/ttyS1 到 /dev/ttyS9。

ls /dev/ttyS[1-9]

关于如何使第一个表达式起作用的任何想法?

【问题讨论】:

  • 你需要把最后一位设为可选,你可以试试/dev/ttyS[1-9][0-9]?
  • 恐怕不行
  • 你可能需要扩展模式匹配How to use ls to list out files that end in numbers
  • @CodeManiac:您将其视为正则表达式(可能是因为 OP 错误地称呼它),它不是正则表达式,而是全局模式。规则非常不同。
  • 这看起来您实际上使用的是glob 而不是regex。这里完全不同的东西,你真的应该正确地标记你的问题以避免造成混乱。这就是为什么你至少得到了我的 DV。

标签: linux glob


【解决方案1】:

有什么问题:

$ ls /dev/ttyS[1-9]*

我的意思是,我知道它不会强制后续字符为数字 - 但由于我们知道这些文件是如何命名的,所以它总是可以工作的。

更新:您似乎有点困惑。这些是全局模式,而不是正则表达式。但我不确定 Python 如何适应这一点。

如果您想要一个精确的 glob 模式来满足您的要求,请使用:

$ ls /dev/ttyS{[1-9],[1-9][0-9]}

【讨论】:

  • 它不会匹配 S10、S20、S30 或任何其他 10 的倍数。
  • @K.Dᴀᴠɪs:你为什么这么说?这是一个全局模式,而不是正则表达式。
  • 好点,我想这就是每个人都感到困惑的原因。 OP 真的应该使用适当的标签来避免混淆。 (顺便说一句,DV 不是来自我)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
相关资源
最近更新 更多