2017-08-10 170 views
-2

我正在写一个脚本,我需要从shell命令输出中获取一个数字。该命令&其回报是使用sed/grep/awk从流中提取数字

$ 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种 我的模式迄今似乎并没有让我期待的数量。

+1

我会在这里留下以防万一:https://stackoverflow.com/help/someone-answers –

+0

那些链接属于这里? – OK999

+1

我认为这是一个暗示,接受更多的答案,看到60个问题中,你只接受12个答案?只是猜测,但。假设你得到的答案实际上解决了你的问题,那就是。 –

回答

1

我似乎想要在最后2个斜杠之间提取远程分支名称的一部分。你可以使用grep与Perl的解释模式实现这一目标,你在这里,

$ git branch ... | grep -oP '[^\/]+(?=\/[^\/]+$)' 
1166 

简要说明,

  • -o:只打印匹配的(非空)部分
  • [^\/]+grep命令会打印此部分,非斜杠模式
  • (?=\/[^\/]+$):匹配行的las斜线前面的字[^\/]+$
0

不是我确切的问题的答案,但我能够通过修改我的bash命令得到我想要的。

git branch -r -v --no-abbrev --contains $(git rev-parse HEAD) | awk '{print $1}' 

这将返回:origin-pull/1166/merge,这正是我想要

通知在命令中-r,-a将返回本地和远程的Git分支信息。这样,我可以再次在sed模式上作弊。