Regex 在OSX上的bash脚本中使用正向查找时出错

Regex 在OSX上的bash脚本中使用正向查找时出错,regex,bash,macos,sed,Regex,Bash,Macos,Sed,我正在处理一个字符串(BRANCH_NAME)并删除正斜杠前面的字符。这用于更改git中的提交消息 例如,分支“功能/pux-1234”将更改为pux-1234。可能存在不同的价值,相互排斥。在第一次尝试中,我检查两个值:feature/和hotfix/ 代码如下: # Remove everything up to the first slash if it exists if [[ $BRANCH_NAME == *"/"* ]]; then PRETRIM=$(echo $BRANC

我正在处理一个字符串(BRANCH_NAME)并删除正斜杠前面的字符。这用于更改git中的提交消息

例如,分支“功能/pux-1234”将更改为pux-1234。可能存在不同的价值,相互排斥。在第一次尝试中,我检查两个值:feature/和hotfix/

代码如下:

# Remove everything up to the first slash if it exists
if  [[ $BRANCH_NAME == *"/"* ]]; then
  PRETRIM=$(echo $BRANCH_NAME | sed -E 's/(?:(?<=feature\/)|(?<=hotfix\/)).+/' )
else
  PRETRIM = $BRANCH_NAME
fi
#删除第一个斜杠之前的所有内容(如果存在)
如果[[$BRANCH_NAME==*“/”*];然后
PRETRIM=$(echo$分支机构名称| sed-E的/(?:)?
例如,分支
功能/pux-1234
将更改为
pux-1234


在这里您不需要查找,而且无论如何
sed
不支持查找

您可以使用
sed
中的捕获组匹配一个组中的所有选项并替换为空字符串:

s='feature/pux-1234'
sed -E 's~(feature|hotfix)/~~' <<< "$s"


使用
extglob
,您可以在
bash
本身中执行此操作:

shopt -s extglob
echo "${s/+(feature|hotfix)\/}"

例如,分支
功能/pux-1234
将更改为
pux-1234


在这里您不需要查找,而且无论如何
sed
不支持查找

您可以使用
sed
中的捕获组匹配一个组中的所有选项并替换为空字符串:

s='feature/pux-1234'
sed -E 's~(feature|hotfix)/~~' <<< "$s"


使用
extglob
,您可以在
bash
本身中执行此操作:

shopt -s extglob
echo "${s/+(feature|hotfix)\/}"


sed
不支持向后看。Use
perl
sed
不支持向后看。Use
perl
sed
默认实现BRE。您可以使用
-E
选项获取ERE,但没有PCRE选项。根本不支持向后看。Use
sed
不支持向后看。Use
perl
sed
不实现PCRE,默认情况下它实现BRE。您可以使用
-E
选项来获取ERE,但没有PCRE选项。根本没有任何查找。
shopt -s extglob
echo "${s/+(feature|hotfix)\/}"
pux-1234