有30个文件名如下:
sample_kmer_41_2.lib1.bowtie.file1.27.faabyss_sample
我需要输出:
abyss_sample_kmer_41_2.lib1.bowtie.file1.27.fa
我不知道怎么做,我已经把这些名字搞砸了。谢谢你的帮助。
答案 0 :(得分:4)
使用rename
实用程序:
rename 's/(.*)\.fa(.*)_sample$/$2_$1/' *
rename
是perl软件包的一部分,默认情况下安装在类似debian的系统上。有一个不同且不兼容的rename
实用程序作为util-linux
包的一部分提供。
答案 1 :(得分:2)
如果你有基于Perl的prename
(可能名为rename
)命令,那么:
prename 's/(.*)abyss_sample$/abyss_$1/' sample_kmer_*
使用的确切正则表达取决于名称的损坏程度。这适用于给出的示例名称;可能需要调整才能使用其他名称。
答案 2 :(得分:1)
你可以使用for循环。由于我总是对这些东西感到紧张,我建议先做一个回声,以确保一切看起来都很时髦...
#!/bin/bash
for FILE in sample_kmer_41_2*abyss_sample ; do
NEWNAME=`echo $FILE | sed -e 's/abyss_sample//'`
echo mv $FILE $NEWNAME
done
如果不需要调整,您可以删除echo
或根据需要进行修改。