2016-07-05 10 views
0

Ich habe Probleme mit Bash genau ein Muster übereinstimmen. Sagen wir zum Beispiel, ich möchte nur übereinstimmende Buchstaben vor meiner Dateiendung wie diese "test.bam", aber in dem Fall, dass eine Zahl wie "t1st.bam" enthalten ist, bekomme ich diese Ausgabe: "st".Genaue Übereinstimmung für Muster in Bash

hello="t1est.bam" 
re="([a-zA-Z]+)\.bam" 


if [[ $hello =~ $re ]]; then 

    result=${BASH_REMATCH[1]} 
else 
    echo "unable to parse string" 
fi 
echo "$result" 

Was ich möchte, ist zu tun, nicht das Muster überhaupt entsprechen, wenn ein Nicht-Alpha-Zeichen versehen ist, und gehen Sie in die ‚anderen‘ block.Thanks

Antwort

2

Wenn Sie das Spiel wollen Beginnen Sie am Anfang der Zeichenfolge, fügen Sie die ^ Anker:

re='^([a-zA_Z_]+)\.bam' 
+0

Dies funktioniert! Kann ich fragen, was es bedeutet, wenn Sie es wie (^ [.....]) ins Innere der Gruppe setzen? –

+0

@ErikR: [Eine kurze Einführung in reguläre Ausdrücke] (http://www.tldp.org/LDP/abs/html/x17129.html) deckt dies ab. Ein Häkchen "^" zeigt eine Übereinstimmung mit dem Anfang einer Zeile an und kann auch eine Menge von Zeichen negieren (z. B. "[^ a-d]" bedeutet "nicht a, b, c oder d"). Ein Caret in der Mitte des Ausdrucks wird mit einer Newline übereinstimmen, die normalerweise nicht beabsichtigt ist. –

Verwandte Themen