テキストファイルの1行を次のように組み合わせようとしています。
if [[ ${regel} =~ ([\s][CN][G]{2}[A]{2}[T]) ]];
また、/sの代わりに/Aと/bを試してみました。試してみたいくつかの例は次のとおりです。
if [[ ${regel} =~ (\A[CN][G]{2}[A]{2}[T]) ]];
if [[ ${regel} =~ (\b[CN][G]{2}[A]{2}[T]) ]];
if [[ ${regel} =~ ([\A][CN][G]{2}[A]{2}[T]) ]];
if [[ ${regel} =~ ([\b][CN][G]{2}[A]{2}[T]) ]];
一致するものがないように最初の項目を削除すると、
if [[ ${regel} =~ ([CN][G]{2}[A]{2}[T]) ]];
それは私が一致させたいものと一致しますが、文字列を中央に合わせる必要がないように、前のスペースと一致させたいと思います。
私が望む試合の例:
OZBMN6HH1KI CGGAATGGGGGGGGGGGGGGGCGAGAATCTGAAATAGAGTGGTGACGTGCTGCGTTGACATAGGTCCTAGGGACCACCAG
私は何が間違っていましたか?どのように一致させることができますか␣CGGAAT
?
ベストアンサー1
bash
の正規表現は[[ =~ regex ]]
POSIX拡張正規表現です。拡張正規表現がPOSIXで指定された範囲を超えて拡張されるシステム(たとえば、\s
括弧式内にはありませんが、サポートされているGNU正規表現\b
)では、これをbashで引用符で囲まれていない拡張部分としてのみ使用できます(有効にしない限り)。 bash-3.1互換性):
[[ a =~ \ba ]] # returns false
[[ a =~ $(printf %s '\ba') ]] # returns true on GNU systems
BASH_COMPAT=3.1; [[ a =~ '\ba' ]] # returns true on GNU systems
re='\ba'; [[ a =~ $re ]] # returns true on GNU systems.
\A
意味するならトピックの開始そして、私たちは他の正規表現であるperlまたはperl互換正規表現について話しています。
標準EREには複数行パターンの概念がなく、^
タイトルの先頭から一致することができますが、perl
sを使用するときなど、各行の後ろにも一致できます(?m)
。一部のERE実装(ast-openのERE実装など)はこれを拡張としてサポートしていますが(ksh93で動作します)、とにかく複数行モードはデフォルトモードではないため、使用する方が良いでしょ[[ a =~ \Aa ]]
う。^
\A
あっても合わないperl
。[\A]
トピックの開始。[...]
文字(または時には組み合わせ要素)と一致するように設計されています。 EREまたはPerl RE[\A]
で一致します。A
EREまたはPerl REのバックスペース文字と一致します。 EREまたはPerl REの(空白文字)と同じです。\
A
[\b]
b
\
[\s]
s
\
\s
標準 ERE を使用して[CN]G{2}A{2}T
トピックの先頭 ( \A
) または単語以外の文字 ( ) の後の a を一致させるには、次のようにします。\b
[[ $var =~ (^|[^[:alnum:]_])[CN]G{2}A{2}T ]]