for name in file*.txt
do
echo ${name%.txt} | grep -o -E '[0-9]+'
done
有没有比使用grep更好的方法?我有file1.txt,file2.txt ....,想要只提取数字。
答案 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