文字列の先頭と末尾から部分文字列を抽出しています。 「.*」を使用したり、使用せずに試してみました。
$expr "ab1cd1efgfedcbaAAAA" : ".*\(1[a-l]*\)" # Result: 1efgfedcba
$expr "ab1cd1efgfedcbaAAAA" : "\(1[a-l]*\)" # No Result (1cd was expected)
$expr "ab1cd1efgfedcbaAAAA" : "\(ab1[a-l]*\)" # Result: ab1cd
「expr」が2番目の部分文字列検索の結果を提供しない理由
ご覧のように、3番目の検索の部分文字列には「ab」プレフィックスが追加されています。これが2番目の検索と3番目の検索の唯一の違いです。たぶんここに何かが落ちたかもしれません。
'expr'はどのように検索を実行しますか?
答え1
man expr
これは、「STRING:PATTERN」式が「固定」され、情報ページ(info coreutils 'expr invocation'
)に次のものが表示されることを意味します。
`STRING : REGEX'
Perform pattern matching. The arguments are converted to strings
and the second is considered to be a (basic, a la GNU `grep')
regular expression, with a `^' implicitly prepended. The first
argument is then matched against this regular expression.
これは、表示される効果が期待される動作であることを意味します。