exprを使用した部分文字列の抽出

exprを使用した部分文字列の抽出

文字列の先頭と末尾から部分文字列を抽出しています。 「.*」を使用したり、使用せずに試してみました。

$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.

これは、表示される効果が期待される動作であることを意味します。

関連情報