使用sed / grep / awk从流中提取数字

时间:2017-08-10 19:54:10

标签: awk sed grep

我正在写一个脚本,我需要从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 到目前为止,我的模式似乎没有得到我期待的数字。

2 个答案:

答案 0 :(得分:1)

我似乎在尝试在最后两个斜杠之间提取远程分支名称的一部分。并且你可以使用grep和perl解释模式来实现这一点,在这里,

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

简要说明,

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

答案 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模式。