2016-12-16 8 views
1

Например, если у меня есть документ с этими тремя строками. Я знаю, ^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' или для основного regex в grep' \ r \? \ N'. Но я не думаю, что это всегда в третьей строке, хотя OP можно интерпретировать так. – Vampire

+0

@ Vampire Я могу дать более общий ответ, одну минуту. –

+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, но, похоже, по-прежнему не вижу, что '' 'стоит наедине, я только видел, что doc говорит, что он сочетается с' \ w' или '\ n' такими вещами. – Ezeewei

+0

Это не отдельный. Он изменяет символ '|' от символа литерала на метасимвол регулярного выражения, что означает изменение в основном регулярном выражении, которое по умолчанию используется grep, если вы не говорите ему использовать расширенный синтаксис regex или posix: https://www.gnu.org/software/grep/manual/grep.html#Basic-vs-Extended – Vampire