2

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

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

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

4

2 回答 2

2

如果我理解正确,该模式可以翻译成正则表达式:

^abc\.[0-9]+$

所以你可以

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

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

或使用find

find 有一个选项-regex

于 2013-02-23T00:15:07.877 回答
1

如果您正在使用sh而不是bash,并且大概您还希望符合 POSIX 标准,您可以使用:

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

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

If you tagged your question bash because you're using bash, then just use extglob like you described.

于 2013-02-23T01:33:55.540 回答