如何使用 bash 或正则表达式重命名具有多个字母和数字组合和大小的多个文件?



我一直在尝试重命名文件列表,这非常困难...... 这 41 个文件名是:

BEIII_S29_pear_derep.fasta
BEII_S15_pear_derep.fasta
BEI_S1_pear_derep.fasta 
MB211III_S30_pear_derep.fasta
MB211II_S16_pear_derep.fasta
MB211I_S2_pear_derep.fasta
... 

我需要重命名为:

BEIII.fas
BEII.fas
BEI.fas
MB211III.fas
MB211II.fas
MB211I.fas

我尝试使用 for 循环:

for i in *_S[0-9]{1,2}_pear_derep.fasta; do newfile="$(basename $i _S[0-9]{1,2}_pear_derep.fasta)"; echo $newfile; cp ${newfile}_S[0-9]{1,2}_pear_derep.fasta ${newfile}.fas; done;

它没有用,然后

rename 's/([A-Z]*[0-9]*[I]{1,4})_[A-Z][0-9]_[a-z]_[a-z]{1,5}(.fasta).*/$1$2/g' *

它没有用 然后

for file in *.fas; do newfile=$(echo "$file" | sed -re 's/S_[0-9][0-9](.)/./g') mv -v $file $newfile; done;

他们都没有工作。 这里的问题是我必须使用正则表达式来保持变量开头,它在

[A-Z]{2}[0-9]{3}[I]{1,3} 

那么其他一切都被排除在外

S[0-9]{1,2}_[a-z]{4}_[a-z]{5} and then the extension .fasta to .fas

有人可以帮我吗? 谢谢大家

您应该确保*.fasta针对您需要的每个文件。请确保回显mv命令或创建目录的副本并先在那里尝试。

for i in *.fasta; do 
mv $i ${i/_*/}.fas;
done

替换${i/_*/}删除第一个_之后的所有内容。

rename尝试中的正则表达式缺少一堆量词。此外,它不会将扩展名从.fasta更改为.fas。还应将其锚定到文件名的开头和结尾。不需要g修饰符,因为每个名称只执行一次替换。

rename 's/^([A-Z]*[0-9]*I{1,4})_[A-Z][0-9]*_[a-z]*_[a-z]{1,5}.fasta$/$1.fas/' *

相关内容

  • 没有找到相关文章

最新更新