Shell-Script

使用 expr 提取子字元串

  • May 17, 2019

我正在從字元串的開頭和結尾提取子字元串。我嘗試了和沒有“。*”

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

這意味著您看到的效果是預期的行為。

引用自:https://unix.stackexchange.com/questions/246683