![使用 Bash 更改文件名第 N 个字符的大小写?](https://linux22.com/image/1364823/%E4%BD%BF%E7%94%A8%20Bash%20%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E5%90%8D%E7%AC%AC%20N%20%E4%B8%AA%E5%AD%97%E7%AC%A6%E7%9A%84%E5%A4%A7%E5%B0%8F%E5%86%99%EF%BC%9F.png)
我有一个文件夹,我想更改第 5 个位置上某个字符的大小写。
由此:
ABC-xyz
DEF-xyz
GHI-xys
对此:
ABC-Xyz
DEF-Xyz
GHI-Xys
您会注意到 X 已转换为大写。
有什么想法我该如何在 Bash 中做到这一点?
答案1
纯 bash 示例:
#!/usr/bin/env bash
for f in *; do
g="${f::4}" ##Split the first four characters
h="${f:4:1}" ##just the fifth character (starts counting at 0)
i="${f:5}" ## character 6+ (again, counting from 0)
mv -- "$f" "$g${h^^}$i"
##At the end, put the strings back together
##but make $h (character 5) uppercase
done
exit 0
实际上,我可能会使用 perl-rename (rename
在 Ubuntu 存储库中调用;我知道在其他一些存储库中它被称为prename
):
rename 's/(.{4})(.)/$1\u$2/' *