在bash脚本中使用ls命令时进行模式匹配

时间:2013-02-23 00:05:40

标签: regex sh ls

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

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

完成工作,但在终端上,而不是通过脚本。我怎样才能获得与模式匹配的文件?

2 个答案:

答案 0 :(得分:2)

如果我理解你的话,那么这种模式可以转化为正则表达式:

^abc\.[0-9]+$

所以你可以

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

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

或使用find

find有一个选项-regex

答案 1 :(得分:1)

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

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

它可以与带有空格,引号等的文件名一起使用,但可能会匹配一些文件名,其中包含不应包含换行符的文件名。

如果您使用bash标记了问题bash,那么只需使用您描述的extglob。