我正在写一个脚本,我需要从shell命令输出中获取一个数字。命令&它的回归是
$ git branch -a -v --no-abbrev --contains $(git rev-parse HEAD)
* (HEAD detached at c5246b6) c5246b6907e46795741853852462914e7a5f60de Merge pull request 1166 from testPR into dev
remotes/origin-pull/1166/merge c5246b6907e46795741853852462914e7a5f60de Merge pull request 1166 from testPR into dev
我试图通过在管道结果上使用sed从结果中提取1166
。像
$ git branch -a -v --no-abbrev --contains $(git rev-parse HEAD) | sed <pattern>
获得1166 到目前为止,我的模式似乎没有得到我期待的数字。
答案 0 :(得分:1)
我似乎在尝试在最后两个斜杠之间提取远程分支名称的一部分。并且你可以使用grep
和perl解释模式来实现这一点,在这里,
$ git branch ... | grep -oP '[^\/]+(?=\/[^\/]+$)'
1166
简要说明,
[^\/]+
:grep
命令会打印此部分,非斜线模式(?=\/[^\/]+$)
:匹配行[^\/]+$
答案 1 :(得分:0)
不是我的确切问题的答案,但我能够通过修改我的bash命令得到我想要的东西。
git branch -r -v --no-abbrev --contains $(git rev-parse HEAD) | awk '{print $1}'
这将返回:origin-pull/1166/merge
,这就是我想要的
注意命令中的-r,-a将返回本地和远程git分支信息。这样,我可以再次欺骗sed模式。