繁体   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