なぜこれが一致しないのか混乱しています:
expr match Unauthenticated123 '^(Unauthenticated|Authenticated).*'
0を出力します。
コマンドは次のようになります。
expr match Unauthenticated123 'Unauthenticated\|Authenticated'
文字数を一致させたい場合。
文字列(非認証)の一部を返すには、次のように使用します。
expr match Unauthenticated123 '\(Unauthenticated\|Authenticated\)'
info coreutils 'expr invocation'
から:
`STRING:REGEX ' パターンマッチングを実行します。引数は文字列 に変換され、2番目の引数は(基本、la GNU `grep ') 正規表現であり、` ^ '暗黙的に先頭に追加されます。最初の 引数は、この正規表現に対して照合されます。 照合が成功し、REGEXが `\('および` \) 'を使用する場合、 `: ' 式は、 サブ式と一致したSTRINGの部分を返します。それ以外の場合は、一致した文字数 を返します。 一致した場合失敗した場合、「:」演算子は、 「\( 'and `\)」がREGEXで使用されている場合はnull文字列を返し、そうでない場合は0。 最初の` \( ... \) 'のペアは戻り値に関連しています。 追加のペアは、正規表現 式の演算子をグループ化する場合にのみ意味があります。 正規表現、 `\ + '、` \?'、および `\ | 'は、それぞれ1つ以上、0個または1個、または分離文字と一致する演算子 ですe 代替案。 SunOSおよびその他の「expr」は、これらを通常の 文字として扱います。 (POSIXではどちらの動作も可能です。)*注正規表現 式ライブラリ:(regex)Top、正規表現 構文の詳細。いくつかの例は* noteの例にありますexpr ::。 の例
match
と_\|
_の両方がGNU拡張(および_:
_(match
標準と同等)の動作)であることに注意してください。パターンは_^
_で始まりますが、実装によって異なります。通常、次のようにします。
_expr " $string" : " Authenticated" '|' " $string" : " Unauthenticated"
_
先頭のスペースは、_$string
_で始まる、またはexpr
演算子である_-
_の値の問題を回避するためのものですが、一致する文字数に1を追加します。
GNU expr
を使用すると、次のように記述できます。
_expr + "$string" : 'Authenticated\|Unauthenticated'
_
_+
_は、expr
演算子であっても、_$string
_を強制的に文字列として解釈します。 expr
正規表現は、代替演算子を持たない基本的な正規表現です(_|
_は特別ではありません)。 GNU実装では、拡張機能としては_\|
_として実装されています。
_$string
_がAuthenticated
またはUnauthenticated
で始まるかどうかを確認するだけの場合は、以下を使用することをお勧めします。
_case $string in
(Authenticated* | Unauthenticated*) do-something
esac
_
$ expr match "Unauthenticated123" '^\(Unauthenticated\|Authenticated\).*'
かっことパイプを\
でエスケープする必要があります。