2

我正在编写一个 bash 脚本,它从电子表格生成文件名,然后将现有文件转换为新文件。我已经能够以生成的文件名62_02.png为例进行转换。如您所见,它包含整数、下划线和文件扩展名(可能是字母数字)。

我喜欢这个答案的简洁性,我已经看到这篇文章用于awk对纯数字文件名进行简单转换,但我不确定如何让它与下划线一起使用。

sed如有必要,如果这看起来很实用,我也可以使用。

我的目标是有一个看起来像这样的文件名:

0062_02.png

非常感谢!

收盘信息:

我选择了下面的解决方案,因为它有更多的解决方案,以便为他们的利益阅读本文的其他人可以选择。但是,我想提一下@cabad 提供的答案也是有效的,并且对于新手程序员恕我直言来说可能是更友好的解决方案。

4

3 回答 3

4

尝试在中执行此操作:

使用

$ 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
于 2013-07-17T21:05:22.473 回答
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))); }'
于 2013-07-17T21:07:18.327 回答
2

GNU 的代码:

sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'

例子:

$回声6_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0006_02.png

$回声62_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0062_02.png

$回声162_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
0162_02.png

$回声1632_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
1632_02.png

$回声16324_02.png| sed -r ':k;s/\b[0-9]{1,3}_/0&/g;tk'
16324_02.png
于 2013-07-17T22:08:34.517 回答