我的任务是执行一个重要的文件重命名项目。我将重命名的其中一些文件包含多个连字符。我需要将名称中的最后一个连字符换成下划线,以便将文件重命名为我们的新命名约定。
谁能给我解释一下为什么下面的测试代码中最后一个连字符没有被替换为下划线?
#!/bin/bash
image_name="i-need-the-last-hyphen-removed.psd"
echo -e "Normal: ${image_name}"
echo "Changed: ${image_name/%-/_}"
我正在寻找的输出应该模仿以下内容:
Normal: i-need-the-last-hyphen-removed.psd
Changed: i-need-the-last-hyphen_removed.psd
脚本逻辑是根据此处找到的以下文档创建的:http://tldp.org/LDP/abs/html/string-manipulation.html
我曾尝试摆脱炒作,但效果不佳。我已经放弃了,与我过去使用的 SED 和/或 BASH_REMATCH 解决方案相比,这将被证明是最优雅的解决方案。
任何帮助都会很棒。先感谢您。
最佳答案
我建议使用重命名工具来完成此类任务。它与 sed 模式相似。
rename 's/(.*)-/$1_/' *.psd
由于 .* 是贪婪的,这样最后一个 '-' 将被捕获,其中 (.*) 被捕获到组中。右边部分不会改变。
使用 *.psd 您将捕获当前文件夹中的所有 psd 文件
关于regex - 使用 BASH 转换文件名中的最后一个连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30859393/