Bash-通过更改filename变量来更改文件名

Bash-通过更改filename变量来更改文件名,bash,filenames,Bash,Filenames,我想以.txt格式保存多个grep的结果。我知道 for i in GO_*.txt; do grep -o "GO:\w*" ${i} | grep -f - ../PFAM2GO.txt > ${i}_PFAM+GO.txt done 问题是,显然,最终文件名也包含原始文件扩展名,即GO.*.txt.\u PFAM+GO.txt。 现在,我只想要GO.*\PFAM+GO.txt。是否有办法修改${i}以取消.txt,而无需执行重命名或mv 注意:部分具有可变长度。您可以使用从

我想以.txt格式保存多个grep的结果。我知道

for i in GO_*.txt; do
    grep -o "GO:\w*" ${i} | grep -f - ../PFAM2GO.txt > ${i}_PFAM+GO.txt
done
问题是,显然,最终文件名也包含原始文件扩展名,即
GO.*.txt.\u PFAM+GO.txt
。 现在,我只想要
GO.*\PFAM+GO.txt
。是否有办法修改
${i}
以取消
.txt
,而无需执行
重命名
mv

注意:部分具有可变长度。

您可以使用从文件名中删除扩展名:

for i in GO_*.txt; do
    name="${i%.txt}"
    grep -o "GO:\w*" "${i}" | grep -f - ../PFAM2GO.txt > "${name}_PFAM+GO.txt"
done

谢谢,这就成功了!你分享的链接也非常有用。