【发布时间】:2016-10-24 03:49:23
【问题描述】:
我正在为 git 创建一个解析器,它允许包含 [ 的分支名称和同时包含 [] 的 cmets。所以,我需要在[的第一个实例之间拉取跟踪信息,然后是]就行了。
这是我尝试使用的:
sed -rn "s/^\*\ [^\[]*\[([^\]]*)\].*$/\1/p";
你们中的一些人会知道^\*\ 匹配是针对当前分支的。然后,我尝试匹配除[ 之外的所有内容,然后捕获]. 之前的所有内容。不幸的是,匹配似乎与我的第一个子句没有什么不同,即简单的.*\[(.*)\].*$. 任何包含成对方括号的提交都会使我的脚本变得疯狂。
我可以通过喂它来故意破坏我的条款:
* haha 2b35744 [twodeep: ahead 1] Bad comments contain hashes followed by brackets... bad2bad [].
请注意,sed 匹配在第二对方括号之间。我想匹配twodeep: ahead 1,但我的子句返回一个空字符串(匹配第二对方括号)。我觉得这可能是 awk 的情况。
【问题讨论】:
-
不要将附加信息放入 cmets。编辑您的问题。此外,假设您的读者不知道 git 分支名称的样子。只需列出有效的输入和您期望的结果。您列出的输入是否碰巧在 git 中具有任何意义完全超出了您的问题的重点。
-
请保持 cmets 文明和建设性
-
早上好,乔恩。
-
您似乎正在尝试解析
git branch -vvv或类似的输出。你可能对 Git 的“管道”命令有更多的运气。如果是这样,您可能想查看或询问有关使用 Git 管道命令生成类似于git branch的输出的问题,但更适合您自己的目的(无论它们是什么)。同时,由于这是一个关于 sed 的问题,因此似乎应该删除 [git] 标记... -
这就是我正在做的事情,托雷克。我不熟悉 git 管道。这个标签似乎适合这个问题,虽然这是我在这个网站上问的第一个问题,所以我完全不熟悉它的操作。
标签: sed