我正在使用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
答案 0 :(得分:0)
来自expr
的手册页:
STRING:REGEX 执行模式匹配。参数被强制转换为字符串 第二个被认为是(基本的,一个GNU` grep') 正则表达式
在基本的GNU grep正则表达式中,不支持非贪婪匹配修饰符。
考虑使用其他工具,例如sed
,awk
,grep -P
等
在您的具体示例中(文件名中不会有换行符),您只需执行echo "$vcfs" |grep "^dbsnp_[1-9][3-9][3-9].*\.vcf"