Git 如何编写一个grep,在第三行中提取特定单词?

Git 如何编写一个grep,在第三行中提取特定单词?,git,grep,changelog,Git,Grep,Changelog,例如,如果我有一个包含这3行的文档。我知道^feat与第一个feat匹配,如何匹配第三行reg?我尝试了^reg似乎不起作用 feat(ad): make new ad some note here reg(ad): need a walk through 这意味着要在.changelogrc文件中使用您可以尝试使用以下正则表达式: ^[^\r\n]*?\r\?\n[^\r\n]*?\r\?\nreg 这个正则表达式将从开头“吃”两行,然后检查第三行的开头是否出现reg。请注意,我使用了qu

例如,如果我有一个包含这3行的文档。我知道
^feat
与第一个
feat
匹配,如何匹配第三行
reg
?我尝试了
^reg
似乎不起作用

feat(ad): make new ad
some note here
reg(ad): need a walk through

这意味着要在
.changelogrc
文件中使用您可以尝试使用以下正则表达式:

^[^\r\n]*?\r\?\n[^\r\n]*?\r\?\nreg
这个正则表达式将从开头“吃”两行,然后检查第三行的开头是否出现
reg
。请注意,我使用了quantity
\n |\r\n
来表示换行符,以涵盖Windows或Linux(您从未提到过您的操作系统)

如果要匹配以
reg
开头的任何行,可以尝试:

^(?:[^\r\n]*?\r\?\n)*reg

查看该工具的源代码后,您应该启用调试日志记录以查看发出的git命令,该命令使用
this.log('debug','Executing:',git_log_命令)记录。通过快速查看源代码,我会说您得到了类似于
git log--grep=“^feat”^reg”
的内容,这是不正确的,但应该是
git log--grep=“^feat”^reg”
。但不管怎样,如果你有日志行,您可以尝试独立执行该命令,看看它是否适合您,并可以使用它来找出原因。

您想要什么确切的输出?@fedorqui因此基本上它是一个grep,将在git changelog中使用,以获取字符串
reg
,并创建一个
回归的标题,但我认为这是由git changelog lib,我想我所需要的就是编写正确的grep!是的,我知道您想要正确的
grep
。但为此,我们需要知道对于这个给定的输入,您想要提取什么输出<代码>grep“^reg”
似乎没问题。@fedorqui-hum。。。听起来我必须深入研究lib,因为我写了
^reg
,但它不起作用。所以我想也许是因为我的grep不正确,当你运行这个命令时,你得到了什么输出?你可以使用
\r?\n
或者grep
\r\?\n
中的基本正则表达式,而不是
(?:\n\r\n)
。但我不认为它总是在第三行,尽管OP可以这样解释。@Vampire我可以给出一个更一般的答案,一分钟。顺便说一句。你试过你的解决方案吗?这似乎对我不起作用。除此之外,
^reg
应该可以与
--grep
完美配合使用。我认为您的解决方案不可行,因为grep是基于行的,如果没有事先的预处理,您无法进行多行匹配,即使用
sed
或类似方法从输入中提取一条长行。在OP的情况下,这是不可能的,因为使用的是
--grep
git log
选项,而不是包含grep可执行文件的标准bash管道。感谢您的指针!我可以稍后在调试日志中查看它!另外,额外的
`有什么作用?我很快浏览了一下grep文档,但似乎仍然没有真正看到什么是独立的,我只看到doc说它与
\w
\n
之类的东西结合在一起。它不是独立的。它将
|
从文字管道字符更改为regex元字符,表示grep默认使用的基本regex中的更改,如果您不告诉它使用扩展或posix regex语法: