如何替换bash正则表达式中的扩展名?

时间:2019-02-17 13:41:13

标签: regex bash

我正试图编写一个bash脚本来计算一些生物学的东西。我对正则表达式有疑问,bash对我来说还有些陌生。一直以来,我没有时间去学习它所需要的快速结果。 所以我的文件:

RV30.afa
resFilesRV30.fasta
RV30213.afa
resFilesRV30213.fasta
RV30441.afa
resFilesRV30441.fasta
...

我必须使用的命令:

mscore -cftit RV30.afa resFilesRV30.fasta >FinalRV30.txt'

我现在所拥有的:

#!/bin/bash
parallel 'mscore -cftit {} resFile{}.fasta >final{.}.txt' ::: RV*.afa

问题是: resFile {}。fasta =试图打开这样的文件:resFileXXX。 afa .fasta我需要跳过第二个参数(.afa)的扩展名,并通过“ .fasta”将其标出。

我没有在Google上找到解决我的问题的好建议(或者我还不能将其重新构建为脚本),并且我获得结果的时间已经结束。因此,我将很高兴为您解决这个问题提供帮助。在此基础上,我将能够解决其他脚本中出现的其他问题

2 个答案:

答案 0 :(得分:2)

在第二个参数中用{}代替{.},这应该对您有用:

parallel 'mscore -cftit {} resFiles{.}.fasta >final{.}.txt' ::: RV*.afa

在命令中已使用该命令时,替换字符串{.}将删除扩展名。

答案 1 :(得分:1)

这行不通吗?

for afafile in *.afa; do number="${afafile#file}"; number="${number%.afa}"; ./mscore -cftit "$afafile" "resFile${number}.fasta" > "file${number}final.txt"; done