svn log извлечь между строк где найти конкретное слово - PullRequest
1 голос
/ 02 февраля 2012

Я хочу извлечь из журнала SVN весь текст между строк.Если это с sed, awk или grep, то лучше.

Пример: svn.log

------------------------------------------------------------------------
r1075 | popad | 2011-12-02 14:28:20 +0200 (Fri, 02 Dec 2011) | 1 line
Changed paths:
   M /trunk/apps/frontend/modules/mail/templates/candidateSearchAgentSuccess.php
   M /trunk/apps/test.php

Ticket #1000: removing ads from emails
------------------------------------------------------------------------
r1074 | coman | 2011-11-30 10:51:29 +0200 (Wed, 30 Nov 2011) | 3 lines
Changed paths:
M /trunk/apps/frontend/i18n/messages.de.xml
M /trunk/apps/frontend/i18n/messages.en.xml
M /trunk/apps/frontend/i18n/messages.ro.xml

Ticket #1089: translation update: send to friend form
http://example.com/projects/147/tickets/1089
Solved HU translation update


------------------------------------------------------------------------

Я хочу найти Ticket # 1000 и получить весь блок между строками

------------------------------------------------------------------------
r1075 | popad | 2011-12-02 14:28:20 +0200 (Fri, 02 Dec 2011) | 1 line
Changed paths:
   M /trunk/apps/frontend/saSuccess.php
   M /trunk/apps/frontend/saAddSuccess.php

Ticket #1000: removing ads from emails
------------------------------------------------------------------------

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 02 февраля 2012

этот awk oneliner дает вам необходимый вывод:

awk -vRS='-+\n' '/Ticket #1000/' svn.log

тест

kent$  awk -vRS='-+\n' '/Ticket #1000/' svn.log 

r1075 | popad | 2011-12-02 14:28:20 +0200 (Fri, 02 Dec 2011) | 1 line
Changed paths:
   M /trunk/apps/frontend/modules/mail/templates/candidateSearchAgentSuccess.php
   M /trunk/apps/test.php

Ticket #1000: removing ads from emails

Вы видели, что разделитель строк (-----) не выводился. это может быть легко добавлено, если вам действительно нужно.

2 голосов
/ 02 февраля 2012

Я бы предложил использовать вывод xml журнала svn и извлечь информацию из файла XML вместо этого ... может быть проще ...

svn log --xml ...
1 голос
/ 02 февраля 2012

Это может работать для вас:

 sed '/^-\+$/{h;:a;$d;N;/-\+$/!ba;/Ticket #1000:/p;g;ba};d' svn.log
1 голос
/ 02 февраля 2012

Интересное упражнение, так что я пошел!

% awk ' 
{
    lines = lines "\n" $0
}

/Ticket #1000/ {
    found = 1
}

/^-+$/ {
    if (found) {
        print lines
    }
    lines = $0
    found = 0
}
' svn.log
------------------------------------------------------------------------
r1075 | popad | 2011-12-02 14:28:20 +0200 (Fri, 02 Dec 2011) | 1 line
Changed paths:
   M /trunk/apps/frontend/modules/mail/templates/candidateSearchAgentSuccess.php
   M /trunk/apps/test.php

Ticket #1000: removing ads from emails
------------------------------------------------------------------------

Я думаю, это довольно очевидно, но обновит ответ, если нет.

Это работает, даже если в строке поиска содержится более одного коммита.

Создание переменной строки поиска оставлено в качестве упражнения.

Протестировано с использованием:

% awk --version
awk version 20070501

Я предпочитаю избегать однострочников. Если вам нравятся такие вещи, то вам понадобятся точки с запятой между утверждениями.

...