我正在为git创建一个解析器,它允许包含[
的分支名称和包含[]
的注释。因此,我需要在第一个[
后跟]
的实例之间提取跟踪信息。
以下是我尝试使用的内容:
sed -rn "s/^\*\ [^\[]*\[([^\]]*)\].*$/\1/p";
有些人会知道^\*\
匹配是针对当前分支的。然后,在[
之前捕获所有内容之前,我尝试匹配除].
之外的所有内容。不幸的是,匹配似乎与我的第一个子句没有什么不同,这是一个简单的.*\[(.*)\].*$.
任何包含成对方括号的提交我的剧本变得疯狂了。
我可以通过喂食来故意破坏我的条款:
* haha 2b35744 [twodeep: ahead 1] Bad comments contain hashes followed by brackets... bad2bad [].
请注意,sed匹配位于第二对方括号之间。我想匹配twodeep: ahead 1
,但我的子句返回一个空字符串(在第二对方括号之间匹配)。我觉得这可能是awk的情况。
答案 0 :(得分:0)
试试这个:
$ sed -rn 's/^\*[^[]*\[([^]]*).*/\1/p' <<< "* haha 2b35744 [twodeep: ahead 1] Bad comments contain hashes followed by brackets... bad2bad []."
twodeep: ahead 1
您不应该在字符范围内转义方括号,只需将它们放在列表的开头即可。因此,您只需在模式中将[^\]]
替换为[^]]
,将[^\]]
替换为[^]]
。
答案 1 :(得分:0)
如果您不需要:
...
private Mat processedFrame;
@Override
public void onCameraViewStarted(int width, int height) {
processedFrame = new Mat();
...
}
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
final Mat frame = inputFrame.rgba();
Mat result = bs.process(frame);
result.copyTo(processedFrame);
result.release();
return processedFrame;
}
然后编辑您的问题,以提供更具真实代表性的样本输入/输出和更清晰的描述。
答案 2 :(得分:0)
使用TXR:
$ git branch -vvv | txr gitbranchvvv.txr - | head NAME UPSTREAM AHEAD BEHIND MSG MAKEFRESH 0 0 Implementing finalization hooks. alloca master 0 1195 Detect alloca. awk-uwr-feature-branch 0 0 WIP chk-manage-vec-branch 0 0 Use chk_manage_vec for static slots arrays. cirqual 0 0 WIP curl 0 0 Curl: WIP debugger-improvements 1 0 WIP del-indices-branch master 8 882 WIP dict-branch master 0 1224 WIP
gitbranchvvv.txr
中的代码:
@(collect)
@ (cases)
@name @hash [@upstream: ahead @ah, behind @bh] @msg
@ (or)
@name @hash [@upstream: ahead @ah] @msg
@ (or)
@name @hash [@upstream: behind @bh] @msg
@ (or)
@name @hash [@upstream] @msg
@ (or)
@name @hash @msg
@ (bind upstream nil)
@ (end)
@ (maybe)
@ (bind (ah bh) (0 0))
@ (end)
@(end)
@(output)
NAME UPSTREAM AHEAD BEHIND MSG
@ (repeat)
@{name 30} @{upstream 16} @{ah -8} @{bh -8} @msg
@ (end)
@(end)
前面/后面的grokking可以缩小。但这需要比复制和粘贴更多的努力;何必。而且,六个月后代码可能难以理解。
答案 3 :(得分:-2)
以下是适用于此应用程序的内容:
git branch -vv | sed -rn 's/^\*\ (.*)$/\1/p' | awk -F\[ '{print $2}' | awk -F\] '{print $1}'
这匹配活动分支,并解析第一个方形括号和下一个方括号之间的位。分支名称允许包含结束方括号。就其本身而言,sed似乎与该行上的一个字符的最后一个实例相匹配。使用awk比sed更可靠。