我正在编写一个bash脚本,它从电子表格生成文件名,然后将现有文件转换为新文件。我已经能够使用生成的文件名62_02.png
进行转换。如您所见,它包含整数,下划线和文件扩展名(可能是字母数字)。
我喜欢简洁this answer是多么简洁,我看到this post使用awk
对纯数字文件名进行简单转换,但我不知道如何才能获得它使用下划线。
如果有必要,我也可以使用sed
,如果这看起来很实用的话。
我的目标是拥有一个如下所示的文件名:
0062_02.png
非常感谢!
结束信息:
我选择了下面的解决方案,因为它有更多的解决方案,以便其他人可以选择阅读此内容。但是,我想提一下@cabad提供的答案也是有效的,对于新手程序员,恕我直言,这可能是更友好的解决方案。
答案 0 :(得分:4)
尝试在shell中执行此操作:
使用bash:
$ a=62_02.png
$ printf -v newvar %04d_%s ${a%_*} ${a##*_}
echo "$newvar"
0062_02.png
另一个简洁的解决方案:
$ ( a=62_02.png; IFS=_; printf '%04d_%s\n' $a )
0062_02.png
答案 1 :(得分:4)
根据要求使用awk:
echo "62_02.png" | awk -F_ '{ printf("%04d_%s\n", $1, $2); }'
“-F_”告诉awk使用下划线作为字段分隔符。这个答案假定您的文件名只有一个下划线。
编辑:如果你的文件名可以有多个下划线,那么你可以这样做:
echo "62_02.png" | awk -F_ '{ printf("%04d_%s\n", $1, substr($0, index($0, $2))); }'
echo "62_02_x.png" | awk -F_ '{ printf("%04d_%s\n", $1, substr($0, index($0, $2))); }'
答案 2 :(得分:2)
GNU代码sed:
sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
示例:
$ echo 6_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk' 0006_02.png $ echo 62_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk' 0062_02.png $ echo 162_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk' 0162_02.png $ echo 1632_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk' 1632_02.png $ echo 16324_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk' 16324_02.png