Shell-Script
使用 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’ 沒有給出第二個子字元串搜尋的結果。
可以看出,在第三次搜尋中,‘ab’ 已作為子字元串的前綴。這是第二次和第三次搜尋之間的唯一區別。也許我在這裡遺漏了一些東西。
’expr’ 是如何進行搜尋的?
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.
這意味著您看到的效果是預期的行為。