Bash
為什麼我的正則表達式無法在 Mac OSX 上的 bash 腳本中使用 sed?
我正在嘗試
CBX-1234
從字元串CBX-1234--CBX-5678
或CBX-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 或其他方式的建議。
您需要添加
-E
到sed
命令行以使其使用擴展的正則表達式:sed -E 's/^([A-Za-z]+-[0-9]+)/\1/'
如果您想要將字元串縮短
CBX-1234--CBX-5678
為CBX-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
我沒有列出該選項。雖然它也有效。