2016-07-05 5 views
0

パターンと正確に一致するbashに問題があります。たとえば、私はこの "test.bam"のようなファイル拡張子の前に文字をマッチングさせたいだけですが、 "t1st.bam"のような数字が含まれている場合、 "st"という出力が得られます。私はそれがやりたいことは非アルファの文字が提供されている場合に、すべてのパターンに一致し、あなたが試合をしたい場合は「他」block.Thanksbashのパターンの完全一致の取得

答えて

2

に行くことはない

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" 

文字列の先頭から始めて、アンカーを追加します。

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

これは機能します。 (^ [.....})のようにグループの内側に置くとどういう意味でしょうか? –

+0

@ErikR:[正規表現の簡単な紹介](http://www.tldp.org/LDP/abs/html/x17129.html)でこれを扱っています。キャレット '^'は行頭に一致することを示し、文字セットを否定することもできます(例: '[^ a-d]'は "not a、b、c、d"を意味します)。式の中間にあるキャレットは、通常は意図しない改行と一致します。 –

関連する問題