Jon*_*Sud 0 regex bash string-parsing
我使用 bash 并且我有字符串(提交消息)
:sparkles: feat(xxx): this is a commit
Run Code Online (Sandbox Code Playgroud)
我想把它分成变量部分:
emoji=:sparkles:
type=feat
scope=xxx
message=this is a commit
Run Code Online (Sandbox Code Playgroud)
我尝试使用 grep,但正则表达式没有返回我需要的内容(例如“类型”),无论如何如何将其粘贴到变量中?
echo ":sparkles: feat(xxx): this is a commit" | grep "[((.*))]"
Run Code Online (Sandbox Code Playgroud)
使用 bash 版本 >= 3,一个正则表达式和一个数组:
x=":sparkles: feat(xxx): this is a commit"
[[ "$x" =~ ^(:.*:)\ (.*)\((.*)\):\ (.*)$ ]]
echo "${BASH_REMATCH[1]}"
echo "${BASH_REMATCH[2]}"
echo "${BASH_REMATCH[3]}"
echo "${BASH_REMATCH[4]}"
Run Code Online (Sandbox Code Playgroud)
输出:
:火花: 壮举 xxx 这是一个提交
来自man bash:
BASH_REMATCH: 一个数组变量,其成员由 =~ 二元运算符分配给 [[ 条件命令。索引为 0 的元素是与整个正则表达式匹配的字符串部分。索引为 n 的元素是与第 n 个带括号的子表达式匹配的字符串部分。该变量是只读的。