使用正则表达式批量重命名 *fastq.gz 文件



我正在尝试让正则表达式与rename一起使用;我在这里尝试了类似答案问题的方法,但无法得到我想要的结果。

这些文件按以下方式命名:

SR1_S90_L001_R1_001.fastq.gz 
SR1_S90_L001_R2_001.fastq.gz
Rinc_S96_L001_R1_001.fastq.gz 
Rinc_S96_L001_R2_001.fastq.gz

只想保留第一个下划线和_R1_或_R2_标签之前的信息,如下所示:

SR1_R1_.fastq.gz 
SR1_R2_.fastq.gz
Rinc_R1_.fastq.gz 
Rinc_R2_.fastq.gz
rename 's{^([^._]+)_[^.]*(_R[12]_)[^.]*}{$1$2}' *

这个想法是匹配(并捕获(字符串的第一部分(1 个或多个非._字符(,后跟_和 0 或多个非.字符,后跟_R1__R2_(我们也捕获此部分(,然后再次匹配 0 个或多个非.字符。

这应该匹配文件名的第一部分(在.之前(,并将其替换为第一个和第二个捕获的子字符串,即第一个_和 R1/R2 标签之前的所有内容。

下面执行当前目录中所需的重命名:

opendir DIR, '.';
for (readdir DIR) {
/^([^_]+).*(_(?:R1|R2)_)[^_]+(.fastq.gz)$/ or next;
rename $_, "$1$2$3";
}

最新更新