2016-04-04 9 views
0

ich benutze bash. Ich habe alles versucht, was ich konnte. Es funktioniert immer in Regexr. Es funktioniert für andere Dateien. Für eine Datei funktioniert es einfach nicht, egal was passiert. Ich kann ? nicht verwenden, um einen Quantifizierer faul zu machen. Ich kann die dbsnp-Datei nicht isolieren. Bitte hilf mir!Wie man nicht-gierige Übereinstimmung in Ausdruck

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 
+1

ich Ihre 'dbSNP run = \ 'expr "$ vcfs":'. * \ (dbsnp_ [1-9] [3-9] [3-9] [^ \ n] * \. vcf \) '\ "' auf meinem Redhat-Rechner und Die Ausgabe ist 'dbsnp_138.b37.vcf', was richtig ist! Also welches Betriebssystem benutzt du? – Quinn

+0

Ich denke, ich benutze CentOS, aber ich bin mir nicht sicher. Die Spezifikationen sagen nur Linux. – eugheugh

+0

'cat/etc/centos-release' – Quinn

Antwort

0

Von Manpage von expr:

STRING: REGEX Musterabgleich durchführen. Die Argumente werden in Strings dazu gezwungen und die zweite wird als ein sein (basic, a la GNU `grep ') regulären Ausdruck

In Grund GNU grep regex, nicht gierige Spiel Modifikator wird nicht unterstützt .

Betrachten andere Tools wie sed, awk, grep -P etc


In Ihrem speziellen Beispiel (es wird nicht Zeilenumbrüche in Dateinamen sein), können Sie einfach tun echo "$vcfs" |grep "^dbsnp_[1-9][3-9][3-9].*\.vcf"

+0

Ich versuchte die \ r-Option zunächst. Es hat nicht funktioniert. Ich werde das Grep versuchen. Ist mein vorheriger Kommentar verschwunden? – eugheugh

+0

weiß nicht über Ihren "vorherigen Kommentar". Ich werde nur die '\ r'-Lösung entfernen, da ich glaube, dass sie nicht universell gilt. Btw, darf der Downvoter bitte sagen, warum runter? –

Verwandte Themen