我正在介绍Unix类,并被困在最终的作业上。我需要编写一个脚本来更改脚本运行时输入的文件名的文件扩展名。当脚本运行时,新的文件扩展名也被输入。该脚本调用chExt1.sh。我们的脚本的第一次试验如下在unix中更改文件扩展名
./chExt1.sh cpp aardvark.CPP
剧本是想改变第二个输入文件扩展名的第一个输入指定的文件扩展名运行。假设文件名或文件扩展名是作为新扩展名提供的文件扩展名并不重要,也不只是将大写字母改为小写字母。希望在以下情况下做到这一点非常清楚:
./chExt1.sh istink helpme.plEaSe
该脚本会将helpme.plEaSe更改为helpme.istink。我在这个论坛和谷歌搜索,并没有看看我尝试了不同的例子,我发现。以下是我尝试过的一些示例以及我目前的示例。 当前
#!/bin/sh
fileExtension="$1"
shift
oldName="$2"
shift
newName=${oldName%%.*}${fileExtension}
echo $newName
回声只是为了看看它是否工作,如果我得到它的工作我要添加一个MV保存。 别人认为我曾尝试:
newName=`${oldName%.*}`
newName=`${oldName#.*}`
sed 's/\.*//' $oldName > $newName
我似乎无法找到一些其他的sed的我已经使用,但他们参与反斜杠了很多,()与*在那里。我没有尝试basename命令,因为我不知道要输入的文件扩展名,而我看到的所有示例都需要指定要删除的内容,而我不能。我没有列出我用过的所有不同的引用变体,但我已经尝试了很多。我的指令说使用sed命令,因为我们应该知道如何使用该类,但是当我尝试这样做时,我不会隔离文件的结尾,我相信(因为它需要很长时间才能完成),所以它正在浏览整个文件并且在继续执行之后寻找.s和任何东西。*作为模式。谢谢你提供的所有帮助。
[man rename](https://www.google.com/search?q=man+rename&oq=man+rename&aqs=chrome.0.57j60l3j65l2.2208&sourceid=chrome&ie=UTF-8) –
sample'rename -ns/\ .txt $/\。aaa/* .txt' –