我一直在尝试重命名文件列表,这非常困难...... 这 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/' *