在sh脚本中,我试图遍历所有符合以下模式的文件
abc.123
基本上是abc。只有数字,.
之后的数字可以是任意长度
使用
$ shopt -s extglob
$ ls abc.+([0-9])
完成工作,但在终端上,而不是通过脚本。我怎样才能获得与模式匹配的文件?
答案 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。