git 的跨平台正则表达式子字符串匹配
Cross platform regex substring match for git
很抱歉又问了一个模式匹配问题,但我正在努力寻找一种工具来在 git 挂钩中执行正则表达式。它需要在 Windows、Mac 和 Linux 上工作。
这个 gnu grep 适用于 Windows 和 Linux,但不适用于 Mac(因为 bsd)
echo "feature/EOPP-234-foo" | grep -Po -e '[A-Z]{4}-\d{1,5}'
这适用于 Mac 和 Linux,但不适用于 windows(因为 <git>\usr\bin\egrep
似乎不起作用)
echo "feature/EOPP-234-foo" | egrep -o '[A-Z]{4}-\d{1,5}'
sed
可能是最常用的工具,但如果我能找到匹配的东西就塞满了:
echo "feature/EOPP-234-foo" | sed -n 's/^.*\([A-Z]{4}\-\d{1,5}\).*$//p'
我什至试过 bash
匹配失败
[[ "feature/EOPP-234-foo" =~ ([A-Z]{4}-\d{1,5}) ]] && echo ${BASH_REMATCH[1]}
有什么想法吗?
当您需要在 Windows 上制作 POSIX 工具 运行 时,您需要记住在命令周围使用双引号,而不是单引号。
此外,您可以在所有这些环境中使用通用的 POSIX ERE 兼容正则表达式。这意味着 \d
必须替换为 [0-9]
或 [[:digit:]]
,因为 \d
是仅符合 PCRE 的构造。
您可以使用
grep -Eo "[A-Z]{4}-[0-9]{1,5}"
grep -Eo "[A-Z]{4}-[[:digit:]]{1,5}"
很抱歉又问了一个模式匹配问题,但我正在努力寻找一种工具来在 git 挂钩中执行正则表达式。它需要在 Windows、Mac 和 Linux 上工作。
这个 gnu grep 适用于 Windows 和 Linux,但不适用于 Mac(因为 bsd)
echo "feature/EOPP-234-foo" | grep -Po -e '[A-Z]{4}-\d{1,5}'
这适用于 Mac 和 Linux,但不适用于 windows(因为 <git>\usr\bin\egrep
似乎不起作用)
echo "feature/EOPP-234-foo" | egrep -o '[A-Z]{4}-\d{1,5}'
sed
可能是最常用的工具,但如果我能找到匹配的东西就塞满了:
echo "feature/EOPP-234-foo" | sed -n 's/^.*\([A-Z]{4}\-\d{1,5}\).*$//p'
我什至试过 bash
匹配失败
[[ "feature/EOPP-234-foo" =~ ([A-Z]{4}-\d{1,5}) ]] && echo ${BASH_REMATCH[1]}
有什么想法吗?
当您需要在 Windows 上制作 POSIX 工具 运行 时,您需要记住在命令周围使用双引号,而不是单引号。
此外,您可以在所有这些环境中使用通用的 POSIX ERE 兼容正则表达式。这意味着 \d
必须替换为 [0-9]
或 [[:digit:]]
,因为 \d
是仅符合 PCRE 的构造。
您可以使用
grep -Eo "[A-Z]{4}-[0-9]{1,5}"
grep -Eo "[A-Z]{4}-[[:digit:]]{1,5}"