Bash

為什麼我的正則表達式無法在 Mac OSX 上的 bash 腳本中使用 sed?

  • November 28, 2019

我正在嘗試CBX-1234從字元串CBX-1234--CBX-5678CBX-12345--CBX-5678. 我在 Mac OSX 上使用 bash 腳本,使用 sed 執行正則表達式。

string="CBX-1234--CBX-5678"
shortenedString=$(echo "$string" | sed "s/^([A-Za-z]+-[0-9]+)/\1/")

這將輸出以下錯誤消息:

sed: 1: “s/^(

$$ A-Za-z $$+-$$ 0-9 $$+)/\1/”: \1 未在 RE 中定義

如何擷取子字元串?我願意接受在 bash 中使用 sed 或其他方式的建議。

您需要添加-Esed命令行以使其使用擴展的正則表達式:

sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'

如果您想要將字元串縮短CBX-1234--CBX-5678CBX-1234,您還需要修改替換以將整個字元串考慮在內:

sed -E 's/^([A-Za-z]+-[0-9]+).*/\1/'

您也可以使用bash參數擴展

shortenedString="${string%%--*}"

這將從$string第一次出現的--.

我總是用sed -r

$ echo "abhellocd" | sed -r "s/.*(hello).*/\1/g"
hello

從 sed 的手冊頁:

  -r, --regexp-extended
         use extended regular expressions in the script.

-E我沒有列出該選項。雖然它也有效。

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