【问题标题】:pattern matching while using ls command in bash script在 bash 脚本中使用 ls 命令时的模式匹配
【发布时间】:2013-02-08 17:30:06
【问题描述】:

在 sh 脚本中,我试图遍历所有符合以下模式的文件
abc.123 基本上是 abc。后面只能跟数字,. 后面的数字可以是任意长度。
使用

$ shopt -s extglob
$ ls abc.+([0-9])

完成这项工作,但在终端上而不是通过脚本。如何仅获取与模式匹配的文件?

【问题讨论】:

  • 你确定脚本是用bash而不是sh运行的吗?
  • 谢谢。这是一个 sh 脚本

标签: regex sh ls


【解决方案1】:

如果我没听错的话,模式可以翻译成正则表达式:

^abc\.[0-9]+$

所以你可以

继续使用ls 并grep 输出。例如:

ls *.*|xargs -n1|grep -E '^abc\.[0-9]+$'

或使用find

find 有一个选项-regex

【讨论】:

    【解决方案2】:

    如果您使用的是sh 而不是bash,并且您可能还希望符合 POSIX,您可以使用:

    for f in ./*
    do
        echo "$f" | grep -Eq '^\./abc.[0-9]+$' && continue
        echo "Something with $f here"
    done
    

    它可以很好地处理带有空格、引号等的文件名,但可能会匹配一些不应该包含换行符的文件名。

    如果您标记您的问题bash 是因为您使用的是 bash,那么只需像您描述的那样使用 extglob。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2021-05-27
      • 2019-01-22
      • 2019-08-28
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多