簡體   English   中英

多行輸出的正則表達式 - sed / awk / grep

[英]Regex for multiline output - sed / awk / grep

SVN 日志返回以下信息,但我試圖根據評論獲取修訂號。

由於返回的值是多行的,有沒有辦法使用正則表達式來查找“1712”(在最后一行),然后只為那些匹配返回相應的修訂號 r1055457(從第一行)?

r1055457 | test | 2017-10-26 12:02:33 -0700  (26 Oct 2010) | 3 lines
Changed paths:
M /search/config/legal.json
M /search/server/server.js
[1712]- test commmends

我嘗試了幾個命令,但它只是返回具有正則表達式之一的所有內容。

svn -v log search --limit 1 | awk '/^r[0-9]/,/1712/' 

svn -v log search --limit 1| sed -e '/^r[0-9]*/,/1712/!d' 

awk解救!

$ ... | awk '/^r[0-9]+/{rev=$1} rev && /^\[1712\]/{print rev; rev=""}'

r1055457

您也可以將此awk與空RS從而將所有連續的非空白行都視為一條記錄:

svn -v log search --limit 1 | awk -v RS= '/1712[^\n]*$/{print $1}'

r1055457

1712之后的[^\\n]*$確保我們僅在最后一行中匹配1712 ,而不是在此之前。

與sed

$ ... | sed -n '/^r[0-9][0-9]*/N;:A /\nr[0-9][0-9]*/D;/1712/!{s/\n.*//;N;bA};s/|.*\n.*//p'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM