gpt4 book ai didi

bash - 使用sed用三位数值填充文件名中的数值

转载 作者:行者123 更新时间:2023-11-29 09:44:59 25 4
gpt4 key购买 nike

我正在将一个文件名传递到我的 bash 脚本中,并使用 sed 清理该名称。一些示例文件是:

Test 01.txt
Test v2 01.txt

我想回来:

Test 001.txt
Test v002 001.txt

这是我的脚本

#!/bin/bash

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $@
do

j=`basename "$f" ".???"`
BASENAME=`basename "$f" ".???"`
DIRNAME=`dirname "$f"`

j=`echo $j |sed -e 's/\///g'`
j=`echo $j |sed -e 's/_/ /g'`
j=`echo $j |sed -e 's/^\.//'`
j=`echo $j |sed -e 's/\[[^()]*\]//g'`
j=`echo $j |sed -e 's/([^()]*)//g'`
j=`echo $j |sed -e 's/#//g'`
j=`echo $j |sed -e 's/+/\ /g'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e 's/\&/and/g'`
j=`echo $j |sed -e 's/\ -/-/g'`
j=`echo $j |sed -e 's/-\ /-/g'`
j=`echo $j |sed -e 's/-{2,}/-/g'`
j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`
j=`echo $j |sed -e 's/\.\././g'`
j=`echo $j |sed -e "s/\'//g"`
j=`echo $j |sed -r -e 's/ {2,}/ /g'`
j=`echo $j |sed -e 's/\ \././g'`

if [ "$BASENAME" != "$j" ]; then
mv -v "$f" "$DIRNAME"/"$j"
fi

done

这是问题所在

j=`echo $j |sed -r -e 's/\d+/sprintf("%03d",$&)/e'`

正则表达式适用于重命名,但不适用于 sed。

最佳答案

代替

sed -r -e 's/\d+/sprintf("%03d",$&)/e'

使用

perl -pe 's/\d+/sprintf("%03d",$&)/ge'

关于bash - 使用sed用三位数值填充文件名中的数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com