我正在尝试让正则表达式与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
发布于 2018-06-27 03:42:58
rename 's{^([^._]+)_[^.]*(_R[12]_)[^.]*}{$1$2}' *
其思想是匹配(并捕获)字符串的第一部分(1个或多个非.
或_
的字符),然后是_
和0个或多个非.
字符,然后是_R1_
或_R2_
(我们也捕获这一部分),然后是0个或多个非.
字符。
这应该匹配文件名的第一部分(在.
之前),并将其替换为第一个和第二个捕获的子字符串,即第一个_
和R1/R2标记之前的所有内容。
发布于 2018-06-27 02:59:06
以下代码在当前目录中执行所需的重命名操作:
opendir DIR, '.';
for (readdir DIR) {
/^([^_]+).*(_(?:R1|R2)_)[^_]+(\.fastq\.gz)$/ or next;
rename $_, "$1$2$3";
}
https://stackoverflow.com/questions/51047543
复制相似问题