我在用bash。我已经尽我所能了。它总是在regexr中工作。它适用于其他文件。对于一个文件,无论什么情况,它都不能工作。我不能用?
使量词变得懒惰。我无法隔离dbsnp文件。请帮帮我!
vcfs=$(find . -type f -name "*\.vcf" -printf "%f\n")
echo "$vcfs"
>1000G_omni2.5.b37.vcf
>1000G_phase1.indels.b37.vcf
>1000G_phase1.snps.high_confidence.b37.vcf
>dbsnp_138.b37.vcf
>hapmap_3.3.b37.vcf
>Mills_and_1000G_gold_standard.indels.b37.vcf
thousandG=`expr "$vcfs" : '.*\(1000G_phase1.indels[^\n]*\.vcf\)'`
echo $thousand
>1000G_phase1.indels.b37.vcf
GoldStandard=`expr "$vcfs" : '.*\(Mills_and_1000G_gold_standard.indels[^\n]*\.vcf\)'`
echo $GoldStandard
>Mills_and_1000G_gold_standard.indels.b37.vcf
dbsnp=`expr "$vcfs" : '.*\(dbsnp_[1-9][3-9][3-9][^\n]*\.vcf\)'`
echo $dbsnp
>dbsnp_138.b37.vcf
>hapmap_3.3.b37.vcf
dbsnp=`expr "$vcfs" : '.*\(dbsnp_[1-9][3-9][3-9][^\n]*?\.vcf\)'`
echo $dbsnp
>
dbsnp=`expr "$vcfs" : '.*\(dbsnp_[1-9][3-9][3-9].*?\.vcf\)'`
echo $dbsnp
>
echo `expr "$vcfs" : '.*\(hapmap_[\n]*\.vcf\)'`
>hapmap_3.3.b37.vcf
发布于 2016-04-05 10:17:45
来自expr
的手册页:
字符串: REGEX执行模式匹配。参数被强制为字符串,第二个被认为是一个(basic,a la GNU‘`grep')正则表达式
在基本GNU grep正则表达式中,不支持非贪婪匹配修饰符。
考虑使用其他工具,如sed
、awk
、grep -P
等
在您的特定示例中(文件名中不会有换行符),您可以简单地执行echo "$vcfs" |grep "^dbsnp_[1-9][3-9][3-9].*\.vcf"
https://stackoverflow.com/questions/36411056
复制相似问题