如何增加文件名

时间:2017-10-31 14:17:18

标签: regex shell

我在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"但没有任何运气。

1 个答案:

答案 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