我在abcd1.txt,abc.txt,bc24.txt这样的目录中有一些文件,它是动态创建的,我想首先检查文件名,如果有数字然后增加它并重命名文件,如果它没有任何数字,然后添加数字1。
abcd1.txt --> abcd2.txt
abc.txt --> abc1.txt
bc24.txt --> bc25.txt
我试图使用" echo" $ val" | grep -P' \ d +' -o"但没有任何运气。
答案 0 :(得分:2)
使用bash正则表达式捕获所有位。我假设在你需要递增的数字之前没有数字。
for f in abcd1.txt abc.txt bc24.txt; do
if [[ $f =~ ([^0-9]+)([0-9]*)(\.[^.]+) ]]; then
prefix=${BASH_REMATCH[1]}
n=$(( ${BASH_REMATCH[2]-0} + 1))
ext=${BASH_REMATCH[3]}
echo "$f => $prefix$n$ext"
else
echo "can't parse filename $f"
fi
done
abcd1.txt => abcd2.txt
abc.txt => abc1.txt
bc24.txt => bc25.txt
Perl也非常简洁:找到第一个点之前的数字,然后递增它们。
for f in abcd1.txt abc.txt bc24.txt; do
perl -E '($n = $ARGV[0]) =~ s/(\d*)(?=\.)/1+$1/e; say "$ARGV[0] => $n"' "$f"
done