如何从文件名中获取通配符匹配部分

时间:2017-07-11 22:02:22

标签: shell

for name in file*.txt
do
   echo ${name%.txt} | grep -o -E '[0-9]+'
done

有没有比使用grep更好的方法?我有file1.txt,file2.txt ....,想要只提取数字。

2 个答案:

答案 0 :(得分:1)

如果您的shell是bash,您可能还会考虑将所有非数字字符替换为带有parameter expansion的空字符串,如下所示:

for name in file*.txt; do
  echo "${name//[![:digit:]]/}"
done

相比之下,如果您需要使用与POSIX兼容的shell(并且file前缀是硬编码的),请考虑使用以下符合POSIX的PE修剪前缀和后缀:

for name in file*.txt; do
   num=${name%.txt}; num=${num#file}
   echo "$num"
done

答案 1 :(得分:0)

在bash中:

$ for f in test* ; do f=${f#test} ; echo "${f%.txt}" ; done
1
2
3

如果文件名中有空格,请添加一些引号.bb

使用GNU awk:

$ awk 'BEGINFILE {
    gsub(/^test|\.txt/,"",FILENAME)
    print FILENAME
    nextfile
}' test*
1
2
3