web-dev-qa-db-ja.com

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
Sudhish Vln

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.

つまり、表示される効果は期待される動作です。

8
AlvaroGMJ