如何替换文件扩展名

yae*_*ael 10 bash shell-script

我们要替换脚本文件扩展名

所以我们做了以下事情:

 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
Run Code Online (Sandbox Code Playgroud)

但我觉得我的方法不是那么优雅

注意 - 因为脚本扩展名可以是 bash、perl 或 python,而且目标扩展名可以是“.”之后的任何内容。我们想要全球更换


我使用的是红帽 7.2

Kus*_*nda 20

old_name=run_fix.bash
new_name=${old_name%.bash}.in_hold.txt

printf 'New name: %s\n' "$new_name"
Run Code Online (Sandbox Code Playgroud)

.bash将从 的值中删除文件名后缀$old_name并将其添加.in_hold.txt到结果中。整个事情将被分配给变量new_name

膨胀${variable%pattern}以除去最短后缀字符串匹配的图案pattern从所述值$variable一个标准的参数扩展

替换任何文件名后缀(即文件名中最后一个点之后的任何内容):

new_name=${old_name%.*}.new_suffix
Run Code Online (Sandbox Code Playgroud)

.*模式将匹配最后一个点及其后的任何内容(这将被删除)。如果您使用了%%代替%,则与模式匹配的最长子字符串将被删除(在这种情况下,您将删除字符串中第一个点之后的所有内容)。如果字符串不包含任何点,则它保持不变。