我们要替换脚本文件扩展名
所以我们做了以下事情:
new_name=` echo run_fix.bash | sed 's/[.].*$//' `
new_file_extension=".in_hold.txt"
new_name=$new_name$new_file_extension
echo $new_name
run_fix.in_hold.txt
但我觉得我的方法不太优雅
注意 - 因为脚本扩展名可以是 bash、perl 或 python,并且目标扩展名可以是“.”之后的任何内容。我们想要全球替换
我使用的是红帽7.2
答案1
old_name=run_fix.bash
new_name=${old_name%.bash}.in_hold.txt
printf 'New name: %s\n' "$new_name"
.bash
这将从值中删除文件名后缀$old_name
并添加.in_hold.txt
到结果中。整个事情将被分配给变量new_name
。
从 的值中${variable%pattern}
删除与模式匹配的最短后缀字符串的扩展是pattern
$variable
标准参数扩展。
取代任何文件名后缀(即文件名中最后一个点之后的任何内容):
new_name=${old_name%.*}.new_suffix
该.*
模式将匹配最后一个点及其后面的任何内容(这将被删除)。如果您使用%%
而%
不是最长与模式匹配的子字符串将被删除(在这种情况下,您将删除之后的所有内容)第一的字符串中的点)。如果字符串不包含任何点,则它保持不变。
答案2
尝试rename
拉里·沃尔的命令。默认情况下,并非在所有系统上安装,有些系统有一个具有此名称的不同命令。它绝对适用于基于 Debian 的系统。
rename
用于sed
文件名。