【发布时间】:2015-06-16 05:22:53
【问题描述】:
我的任务是一个主要的文件重命名项目。我将重命名的其中一些文件包含多个连字符。我需要将名称中的最后一个连字符替换为下划线,以便将文件重命名为我们的新命名约定。
谁能向我解释为什么在下面的测试代码中最后一个连字符没有被下划线替换?
#!/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 解决方案相比,这将被证明是最优雅的解决方案。
任何帮助都会很棒。先感谢您。
【问题讨论】:
-
echo "${image_name%-*}_${image_name##*-}" -
看看
rename命令。 -
@AlexP.:+1 非常好。
-
@AlexP。即使是简短的答案也应该作为答案发布,而不是 cmets。
标签: regex linux bash shell sed