2016-12-16 12 views
1

例如,如果我有这3行的文档。我知道^feat是匹配第一个feat,我怎么能匹配第三行reg?我试过^reg似乎不工作。如何编写一个在第三行拾取特定单词的grep?

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

它意味着是一个.changelogrc文件中用于https://github.com/rafinskipg/git-changelog

+1

你想要什么确切的输出? – fedorqui

+0

@fedorqui所以基本上它的一个grep将被用在git-changelog中来获取字符串'reg'并创建'Regression'的标题,但我认为这是通过git-changelog lib来处理的,我所需要的就是编写正确的grep,我想! – Ezeewei

+1

是的,我知道你想要正确的'grep'。但为此,我们需要知道您要为此给定的输入提取什么输出。 'grep“^ reg”'似乎没问题。 – fedorqui

回答

1

您可以尝试使用下面的正则表达式:

^[^\r\n]*?\r\?\n[^\r\n]*?\r\?\nreg 

此正则表达式将“吃”从一开始就两行,然后检查第三行开头是否出现reg。请注意,我使用数量\n|\r\n来表示新行,以覆盖Windows或Linux(您从未提及过您的操作系统)。

如果你想匹配任何线与reg开始,那么你可以尝试:

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

而不是'(?:\ n | \ r \ n)',你可以简单地使用'\ r?\ n'或在grep'\ r \?\ n'中使用基本的正则表达式。但我不认为它总是在第三行,尽管OP可以这样解释。 – Vampire

+0

@吸血鬼我可以给出更通用的答案,一分钟。 –

+0

顺便说一句。你尝试过你的解决方案吗?它似乎不适合我。除此之外'^ reg'应该可以用'--grep'完美地工作。 – Vampire

1

在看看该工具的源代码,你应该启用调试日志记录,看看git的命令被发布,它以this.log('debug', 'Executing : ', git_log_command);登录。从快速浏览消息来源我会说你得到像git log --grep="^feat|^reg"这是不正确的,但应该是git log --grep="^feat\|^reg"。但是,无论如何,如果你有日志行,你可以尝试单独执行命令,看看它是否适用于你,并可以用它来找出为什么没有。

+0

感谢您的指针!我可以稍后在调试日志中检查它!另外,'\'为它做了些什么?我迅速浏览了grep文档,但似乎仍然没有真正看到'''是否独立,我只看到doc说它与'\ w'或'\ n'结合在一起。 – Ezeewei

+0

它不是独立的。它将'|'从字面管道字符更改为正则表达式元字符,它代表基本正则表达式中的变化,默认情况下由grep使用,如果您不告诉它使用扩展或正则表达式语法:https:/ /www.gnu.org/software/grep/manual/grep.html#Basic-vs-Extended – Vampire

相关问题