使用sed修改文件名

时间:2018-03-12 12:14:02

标签: sed

由于我没有rename,我想使用sed修改192个文件名。具体来说,我想删除文件扩展名前的最后5个字符;第一个字符是_,另外4个是随机字母数字字符串,字母为小字或大字。现在文件名的示例:

Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_mimus_CMF_0110_S42_L005_R1_001_prinseq_good_30Nd.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_mimus_CMF_0110_S42_L005_R2_001_prinseq_good_GyUj.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_suturellus_CMF_0305_S71_L005_R1_001_prinseq_good_M99E.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_suturellus_CMF_0305_S71_L005_R2_001_prinseq_good_HZrr.fastq
Rhopalidae_Rhopalinae_Harmostini_Harmostes_sp_CMF_0401_S87_L005_R1_001_prinseq_good_96CG.fastq
Rhopalidae_Rhopalinae_Harmostini_Harmostes_sp_CMF_0401_S87_L005_R2_001_prinseq_good_stNk.fastq

我想用sed脚本做什么:

Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_mimus_CMF_0110_S42_L005_R1_001_prinseq_good.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_mimus_CMF_0110_S42_L005_R2_001_prinseq_good.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_suturellus_CMF_0305_S71_L005_R1_001_prinseq_good.fastq
Pyrrhocoridae_Pyrrhocorinae_Pyrrhocorini_Dysdercus_suturellus_CMF_0305_S71_L005_R2_001_prinseq_good.fastq
Rhopalidae_Rhopalinae_Harmostini_Harmostes_sp_CMF_0401_S87_L005_R1_001_prinseq_good.fastq
Rhopalidae_Rhopalinae_Harmostini_Harmostes_sp_CMF_0401_S87_L005_R2_001_prinseq_good.fastq

我已经尝试sed -r 's/good_(.)+.fastq/good.fastq/'但似乎没有任何事情发生。

4 个答案:

答案 0 :(得分:0)

如果您使用的是Mac,请在此处查看可用的命令:

https://ss64.com/osx/

如果您在此页面中进行重命名,则会出现mv作为移动或重命名文件的方式。

它与Windows不同,它更像是命令行中的Linux,这意味着你可以用它做更多的事情。

答案 1 :(得分:0)

你的sed表达

sed -r 's/good_.+.fastq/good.fastq/'

适合我。要么是你的调用错误,要么是你的MacOS sed和我的Linux-Gnu-sed的差异。

但是,由于你没有抓取字符,匹配(。)+,你不需要大括号:

sed -r 's/good_(.)+.fastq/good.fastq/' files > files2

应该足够了,但可以缩小到......

  

第一个字符是_,另外4个是随机字母数字   带有小字或大字母字母的字符串。

我将您的输入粘贴到文件“文件”中,然后尝试

 for f in *.fastq
 do
     newname=$(echo "$f" | sed ...) 
     mv "$f" "$newname"
 done

将您想要的输出粘贴到files3,并且差异没有显示出差异。你得到了什么?你怎么援引它?

为了移动文件,我想像是

sed --posix 's/good_.*.fastq/good.fastq/' files

可能是一个调用错误。

更新

当我启用--posix样式时,我需要替换。+ with。* - 也许就是这样。

If fo = False Then
    Set wb = Workbooks.Open(filename:=cf)
Else
    Dim w As Workbook
    For Each w In Workbooks
        If w.FullName = cf Then
            Set wb = w
        End If
    Next
End If

仅值得提示:。*。fastq中的第二个点将匹配所有字符,幸运的是包括点本身。用反斜杠掩盖它可以防止误解。

答案 2 :(得分:0)

这是你实际上不需要sed的,只是正常的bash:

for f in *.fastq; do 
    mv "$f" "${f%_*.fastq}.fastq" 
done

应该可以正常工作。

答案 3 :(得分:0)

似乎我的mv命令正在运行,但由于某些原因我的查找器没有更新。