2012-02-02 33 views
1

我想從SVN日誌中提取行之間的所有文本。如果是sed,awk或grep,那就更好了。svn日誌檢索行之間找到特定的字

例子: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 


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

我想搜索票務#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 
------------------------------------------------------------------------ 

感謝字裏行間整個街區。

回答

3

這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 

您已經看到了行分隔符( - - )不在輸出。如果你真的需要,它可以很容易地添加。

+1

+1。這顯然是最新的方法,也是最容易理解的。我打印行分隔符,但;) – Johnsyweb 2012-02-02 10:46:23

+0

謝謝。這有助於很多! – danielpopa 2012-02-02 15:02:13

+2

@danielpopa:「謝謝,這有助於很多!」是最好的表達「[通過點擊答案左邊的複選框大綱。](http://stackoverflow.com/faq#howtoask)」 – Johnsyweb 2012-02-02 19:14:07

2

我會建議使用svn日誌的XML輸出和提取XML文件中的信息instead..might更簡單...

svn log --xml ... 
1

有趣的練習,所以我了個去!

% 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 

我寧願避免單行。如果你喜歡這樣的話,那麼你需要在語句之間使用分號。

+0

是有原因的,爲什麼所有PARAMS不在同一直線上。它給了我語法錯誤。 – danielpopa 2012-02-03 07:05:35

+1

@danielpopa:我已經更新了我的答案。 – Johnsyweb 2012-02-03 08:47:54

+1

非常好。很好用:awk v3.1.6。 – danielpopa 2012-02-03 11:04:04

1

這可能會爲你工作:

sed '/^-\+$/{h;:a;$d;N;/-\+$/!ba;/Ticket #1000:/p;g;ba};d' svn.log