[英]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.